배경
- 클래스 멤버 변수에 final 키워드 여부에 대한 고민을 하게 됨
고려사항과 장단점
- 장점
- 높은 안정성 - 재할당을 막으면 의도치 않은 값의 변경을 방지
- thread-safe - final을 붙여 값 변경을 막는다면 근본적으로 thread-safe 됨
- 컴파일러, GC 성능 향상 - 불변의 객체를 활용하면 가비지 컬렉터가 스캔해야 되는 객체의 수가 줄어서 스캔해야 하는 메모리 영역과 빈도수 역시 줄어들 것이고, GC 수행 지연 시간을 줄이기 가능
- 단점
- 유연성 제한, 상태를 변경 제약 - 동적으로 상태를 업데이트해야 하는 경우 적합하지 않음
- 초기화 제약 - 선언 시점 또는 생성자에서 초기화가 필요함
최종결정 및 구현
- 상태가 자주 변하는 곳을 제외한 읽기 전용 데이터 및 불변 유지해야하는 경우 적극적으로 사용
- 예) Dto → Record