- FileVersion 클래스 구현에서 눈여겨 봐야할 점은 생성자(constructor)에서 인자(parameter) 값을 검사하는 로직이다.
객체지향 프로그래밍이 절차적(혹은 함수형) 프로그램과 다른 점은 데이터(혹은 상태)와 데이터를 조작하는 메소드(혹은 행위)를 결합시킨 구조를 가지고 있다는 점이다. 이러한 구조의 잇점을 최대한 활용하기 위해서는 객체에 값이 설정 혹은 변경될 때 해당 값이 적합한지 여부를 검사하는 로직을 구현해야 한다. 단지, 인터페이스와 클래스를 사용한다고 해서 훌륭한 객체가 되는 것이 아니다. - 전달되는 값 (인자, parameter)이 유효한 것인지 판정해 잘못된 값이 입력되었을 경우, 즉시 오류를 발생시켜 문제가 발생하더라도 그 원인이 외부에 있음을 알아내기 쉽고, 원인을 빠르고 명확하게 파악할 수 있도록 하는 기법을 방어적 프로그래밍이라 한다.
FileVersion.java
public class FileVersion {
private int sequence;
private Date createDate;
private String description;
/**
* 파일 버전 생성자.
*
* @param sequence
* 버전 순번.
* @param createDate
* 버전 생성 일시
* @param description
* 버전 설명
* @throws IllegalArgumentException
* 1보다 작은 순번 혹은 날짜가 입력되지 않은 경우 예외 발생.
*/
public FileVersion(int sequence, Date createDate, String description) {
if (sequence < 1) {
throw new IllegalArgumentException("sequence must greater than 0");
}
if (createDate == null) {
throw new IllegalArgumentException("Must specify valid date");
}
this.sequence = sequence;
this.createDate = createDate;
this.description = description;
}