2015. 3. 14. 22:35
  • Document 클래스의 속성은 제목 (title), 작성자 (wirter), 키워드 목록 (keywords), 요약(abstraction), 원본 링크 (original link), 파일 형식 (format), 버전 파일 목록 (files) 등입니다.
  • 작성자 정보는 이름, 이메일 주소, 홈페이지 등의 복합된 속성을 지녀야 하기 하기 때문에 별개의 클래스로 분리하였습니다. 또한, 한명의 작성자가 여러 문서를 작성하는 일대다(1:n) 관계이기 때문에 분리하는 것이 타당합니다.
  • 키워드는 복수의 명사 단어로 구성되며, 중복된 단어가 입력되어서는 안되기 때문에 Set<String> 타입을 선언합니다. 자료 구조 중에서 Set 타입은 포함된 데이터들의 중복을 허용하지 않는 특성을 가진다는 점을 활용하는 것입니다.
  • 파일 형식은 enum 타입을 사용했으나, 향후에 refactoring 가능성이 있습니다.
  • 하나의 문서가 여려 가지 버전으로 존재할 수 있고, 동일한 파일이 여러 위치에 존재할 수 있습니다. 버전을 고려했을 때 순서(order)가 중요하므로 List 타입을 사용했습니다.
package docar.archive.document;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import docar.user.Writer;

/**
 * '문서' 클래스.
 *
 * @author "Sunny Kwak"
 */
public class Document {
	private String title;
	private Writer writer;
	private Set<String> keywords;
	private String abstraction;
	private URL originalLink;
	private Format format;
	private List<File> files;

	public Document(String title, Writer writer, Set<String> keywords,
			String abstraction, URL originalLink, Format format) {
		if (title == null || title.isEmpty()) {
			throw new IllegalArgumentException("title argument is missing");
		}
		if (writer == null) {
			throw new IllegalArgumentException("writer argument is missing");
		}
		if (originalLink == null) {
			throw new IllegalArgumentException(
					"originalLink argument is missing");
		}
		if (format == null) {
			throw new IllegalArgumentException("format argument is missing");
		}

		this.title = title;
		this.writer = writer;
		this.keywords = keywords;
		this.abstraction = abstraction;
		this.originalLink = originalLink;
		this.format = format;

		files = new ArrayList<File>();
	}
Posted by 곽중선