불변성 (Immutability)

      불변성 (Immutability)에 댓글 없음

불변성이란 객체가 사용되는 도중 어떤 상황에서도 인스턴스 변수의 값이 변하지 않음을 뜻한다.

setter를 뚫어 놓는다면 당연히 그 객체는 불변하지 않다. getter 역시도 컬렉션을 제공할 경우 값을 복사받는 게 아닌 같은 메모리 주소를 참조하기에 컬렉션을 반환받은 메소드에서 원소를 추가하거나 빼면 객체에도 원치 않게 반영되게 된다.

자바는 자료의 불변성을 보장하는 수식어를 따로 제공하지 않는다.
final이 그런 역할을 한다고 오해하는 경우도 있지만, final은 재할당을 금지하는 것이지 값의 불변을 보장하지는 않는다. 예를 들어 Collection의 경우 final이 걸려도 값을 추가하거나 삭제하는 것이 가능하다.

이런 자바에서 자료의 불변성을 유지하기 위해 취할 수 있는 꼼수(?)는 크게 두 가지가 있다

일급 컬렉션 사용하기

이건 다른 글에서 설명했었다. 일급 컬렉션을 사용하여 만든 일급 객체는 불변 객체가 된다.

unmodifiableCollection(Collection c)

굳이 컬렉션을 외부로 가져가는 getter를 뚫어야 한다면 읽기 전용 상태로 만드는 방법이 있다.

Collections.unmodifiableList(List list), Collections.unmodifiableSet(Set set)… 등 Collections 클래스가 제공하는 unmodifiable~ 메소드들로 컬렉션을 읽기 전용으로 만들 수 있다.

댓글 남기기