DocAr/Document
Document 클래스 구현
곽중선
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>(); }