불변 객체 설계 예제가 실행되는 순서
입력 가변 참조 방어 복사에서 시작해 변경 대신 새 객체 반환까지 값과 책임이 이동한다.
-
1
입력 가변 참조 방어 복사
필수 값을 검증해 final 필드에 저장하고 상태를 바꾸는 setter를 제공하지 않습니다.
-
2
final 필드에 불변 상태 저장
호출자가 가진 List나 배열 참조를 그대로 저장하면 생성 뒤 외부 변경이 내부 상태를 바꿀 수 있습니다.
-
3
변경 대신 새 객체 반환
getter가 내부 배열을 반환하면 외부가 내용을 수정할 수 있습니다.
실행 순서 입력 List를 복사하고 불변 List를 반환하므로 외부 변경이 first의 상태로 들어오지 않습니다.