불변 객체

초콜렛빵·2023년 8월 21일
0

TIL

목록 보기
17/27

불변 객체(Immutable Object)

불변 객체란?

  • 불변 객체는 객체 생성 이후 내부 상태가 변하지 않는 객체
  • 객체의 내부 상태를 제공하지 않거나 방어적 복사를 통해 제공
  • 대표적으로 String, Integer, Long 등이 존재

장점

  • Thread-safe 하여 병렬 프로그래밍에 유용하며, 동기화 고려하지 않아도 됨
  • 내부 상태의 변경이 없기 때문에 Cache, Map, Set의 요소로 활용하기 적합
  • 타인의 함수 예측 가능하며, 안전한 사용 가능
  • 가비지 컬렉션의 성능 증가

생성 규칙

  • setter method를 제공하지 않는다.

  • 모든 필드를 private, final로 선언한다.

  • 클래스를 final로 선언한다.

  • 객체를 생성하기 위한 생성자/정적 팩토리를 추가한다.

  • 예시

    public final class ImmutableClass {
        private final int num;
        private final int count;
        private final List<String> list
    
        public ImmutableClass (int num, int count, List<String> list) {
            this.num = num;
            this.count = count;
            this.list = new ArrayList<>(list);
        }
    
        public int getNum() {
            return num;
        }
    
        public int getCount() {
            return count;
        }
    
        public List<String> getList() {
            return new ArrayList<>(list);
        }
    }
profile
차근차근 기록하고 배우는 개발자

0개의 댓글