Java 8에서 불변 객체와 제한된 상태를 모델링합니다.
enum은 가능한 상태를 컴파일 단계에서 제한합니다. 불변 값 객체는 필드를 private final로 두고 생성자에서 검증하며 값을 바꾸는 setter를 제공하지 않습니다.
예제에서 final class Course { private final String title; } 부분부터 찾으세요. 선언 타입, 실제 객체와 반환값을 한 줄씩 따라가면서 컴파일 단계에서 잡히는 문제와 실행 중 생기는 문제를 구분하세요.
값 객체가 컬렉션처럼 변경 가능한 객체를 받는다면 방어적 복사도 필요합니다. final은 참조 교체를 막을 뿐 참조 대상 내부 변경까지 막지는 않습니다.
문자열 상태보다 enum을 사용하면 오타와 허용되지 않은 상태를 줄일 수 있습니다.
현재 코드를 먼저 실행해 출력과 타입 흐름을 확인한 뒤 durationMinutes final 필드를 추가하고 생성자에서 양수인지 검증하세요.
getter로 변경 가능한 내부 객체를 그대로 반환하면 불변성이 깨질 수 있습니다.
직접 바꿔보세요durationMinutes final 필드를 추가하고 생성자에서 양수인지 검증하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.