불변 객체 (Immutable Object)

박영준·2024년 2월 21일
0

Java

목록 보기
110/112

1. 정의

불변 객체는 재할당은 가능하나, 한번 할당하면 내부 데이터를 변경할 수 없는 객체

  • 객체에 값을 할당하면 내부 데이터를 변경시킬 수 없다는 것
  • 예시
    • String, Integer, Boolean ...
      • String은 String str="a", str="ab" 이런 식으로 사용할 때,
        str가 처음에 참조하고 있는 "a"값이 "b"로 변경되는 것이 아니라, "b"라는 새로운 객체를 만들고 그 객체를 str이 참조하게 하는 것이기 때문

2. 예시

아래 코드는 불변이 아닌 클래스

class MutablePerson {
   public int age;
   public int name;
    
   public MutablePerson(int age, int name) {
    	this.age = age;
        this.name = name;
    }
}
  • 외부에서 age나 name을 변경할 수 있기 때문

해당 클래스를 불변 클래스로 만들어보면

class ImmutablePerson {
    private final int age;
    private final int name;
    
    public ImmutablePerson(int age, int name) {
    	this.age = age;
        this.name = name;
    }
}
  • 외부에서 값을 수정할 수 없게 된다. 즉, 불변객체가 된다.
    • final 변수이므로, Setter 메서드를 작성할 수 없음

3. 장단점

장점

  • 객체에 대한 신뢰도 상승

    • 객체가 한번 생성된 후 변하지 않는다면, 트랜잭션 내에서 그 객체가 변하지 않기에 우리가 믿고 사용할 수 있음
  • 생성자, 접근메소드에 대한 방어 복사가 필요 없음

  • 멀티스레드 환경에서, 동기화 처리없이 객체를 공유 가능

단점

  • 객체가 가지는 값마다 새로운 객체가 필요
    • 따라서 메모리 누수와 새로운 객체를 계속 생성해야하기 때문에, 성능 저하 유발

참고: [Java] Immutable Object(불변객체)

profile
개발자로 거듭나기!

0개의 댓글