간단용어

Immutable Object (불변객체)

WOOKTAE 2021. 2. 28. 23:41

Immutable Object 란 ?

 

객체 지향 프로그래밍에 있어서 불변객체 (immutable Object ) 는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 반대 개념으로는 가변(mutable) 객체로 생성 후에는 상태를 변경할 수 있다. 객체 전체가 불변인 것도 있고, C++에서 const 데이터 멤버들 사용하는 경우와 같이 일부 속성만 불변인 것도 있다. 또, 경우에 따라서는 내부에서 사용하는 속성이 변화해도 외부에서 그 객체의 상태가 변하지 않은 것 처럼 보인다면 불변 객체로 보기도 한다. 예를 들어, 비용이 큰 계산의 결과를 캐시하기 위해 메모이제이션 ( Memoization ) 을 이용하더라도 그 객체는 여전히 불변하다고 볼 수 있다. 불변 객체의 초기 상태는 대개 생성 시에 결정되지만 객체가 실제로 사용되는 순간까지 늦추기도 한다. 불변 객체를 사용하면 복제나 비교를 위한 조작을 단수화 할 수 있고, 성능 개선에도 도움을 준다. 하지만 객체가 변경 가능한 데이터를 많이 가지고 있는 경우엔 불변이 오히려 부적절한 경우가 있다. 이 때문에 많은 프로그래밍 언어에서는 불변이나 가변 중 하나를 선택할 수 있도록 하고 있다.

- 위키 백과 

 

Immutable Class 는 변경이 불가능한 클래스이며, 가변적이지 않는 클래스입니다. 만들어진 Immutable class 는 레퍼런스 타입의 객체이기 때문에 HEAP 영역에 생성됩니다.

 

자바에서 Immutable Class 로는 String , Boolean, Integer, Float, Long 등등이 있습니다. 이러한 Immutable Class 들은 heap 영역에서 변경 불가능 한 것이지 재할당을 못하는 것은 아닙니다. 즉, String a = "aa"; 에서 a = "bb" 로 재할당이 가능합니다. a 가 참조하고 있는 heap 영역의 객체가 바뀌는 것이지 heap 영역에 있는 값이 바뀌는 것은 아니다.

 

조금 더 풀이하자면, a가 처음에 참조하고 있는 것이 "aa" 값이 bb 로 변경되는 것이 아니라 아예 "bb" 라는 새로운 객체를 만들고 그 객체를 a가 참조하게 하는 것입니다. 이렇게 했을 경우 "aa"는 아무도 참조하고 있지 않기 때문에 GC (가비지 컬렉터)의 대상이 된다.

 

Immutable 의 특징

장점 : 생성자, 접근메소드에 대한 방어 복사가 필요없습니다. 멀티스레드 환경에서 동기화 처리없이 객체를 공유할 수 있습니다. (Thread-safe) 불변이기 때문에 객체가 안전합니다.

 

단점 : 객체가 가지는 값마다 새로운 객체가 필요합니다. 따라서 메모리 누수와 새로운 객체를 계속 생성해야하기 때문에 성능저하를 발생 시킬 수 있습니다.

'간단용어' 카테고리의 다른 글

Java 8 , Spring Framework 5.0  (0) 2021.03.04
IOC 컨테이너 와 DI ( Dependency Injection)  (0) 2021.03.03
REST ful  (0) 2021.02.28
REST API  (0) 2021.02.07
REST  (0) 2021.02.07