728x90

Immutable Object

  • 불변객체란 한번 객체가 생성되면 그 상태를 바꿀 수 없는 객체
  • JAVA의 대표적인 불변객체는 String이 있다.

 

JAVA의 String

// ex)
String str = "abc";
str = "def";

위 예제는 str변수의 값이 바뀐 것이라고 착각하기 쉽다.

하지만 "def"라는 새로운 객체가 생성되고 str변수가 "def"를 참조 한 것이다.

원래 "abc"객체의 값은 그대로 "abc"로 남아있다. 더이상 참조되지 않는 것이다.

불변객체는 new 인스턴스로 재할당하는 것 외에는 값을 바꿀 수 없다.

 

Immutable Object 정의 방법

  • "setter" 메소드를 사용하지 않는다.
  • 모든 필드(field)를 final, private 사용.
  • 상속 받는 subclass가 해당 메소드를 오버라이딩하게 하지 않는다.(간단한 방법은 final 클래스로 선언)
  • 인스턴스 필드가 가변 객체에 포함되어 참조 되면 해당 객체가 변하게 하지 말 것.(가변 객체에 제공 하지 않는다)

 

Immutable Object 장단점

장점

  • 불변이기에 객체에 대한 신뢰도가 높아진다(객체가 안전하다).
  • 생성자, 접근 메소드에 대한 방어 복사가 필요 없다.
  • 멀티 스레드 환경에서 동기화 처리 없이 객체를 공유 할 수 있다.

단점

  • 객체가 가지는 값마다 새로운 객체가 필요하다.
  • 메모리 누수와 새로운 객체를 계속 생성하기 때문에 성능 저하를 발생시킬 수 있다.
728x90

+ Recent posts