[영상후기] 불변 객체(immutable object)는 안정적인 개발에 아주 도움이 됩니다! 불변 객체의 개념과 장점, 구현 방법을 자바 예제를 통해 배워보아요~!

박철현·2023년 4월 2일
0

영상후기

목록 보기
70/160

movie

  • 불변(immutable) 객체 : 객체 생성 이후 객체의 상태가 바뀌지 않는 객체
    -> 이해하기 쉽고 안정적인 서비스 개발에 도움이 된다(상태가 변하지 않기 때문에 조건문 검사, 데이터를 변경하려는 시도 차단 등)
    -> map, set, cashe에 쓰기에 적합
    -> 일반적으로 thread-safe 하다(쓰레드 공유 해도 안전)
    -> 불변 객체를 필드로 쓰면 방어적 복사를 할 필요가 없음

  • String은 Java의 대표적 불변 객체

  • Java에서 불변 객체 만들기
    -> 생성자를 제외하고 상태를 바꿀만한 메서드 모두 제거(setter 등)
    -> 모든 필드를 private final로 지정
    -> 메서드 override 금지(클래스 상속 금지) --> class 앞에 final 키워드 지정
    -> mutable 객체의 레퍼런스를 공유해서 사용하지 말것, 이를 위해 방어적 복사를 활용(get 으로 접근 시 새로운 객체를 생성해서 넘겨주는 식 등)

  • List를 필드로 가진다면?
    -> mutable list : list와 list에 있는 mutable 객체 모두 방어적 복사 해야 함
    -> immutable list : 얕은 복사 new ArrayList<>(값);

  • 외부에 노출되는 상태 정보는 immutable하지만, 내부에서만 관리되는 상태는 mutable한 경우에도 immutable 객체라고 부르기도 한다(이때는 thread-safe 하지 않을 수 있음)

  • 파이썬의 경우 immutable container가 mutable 객체를 가지고 있을 때 mutable 객체의 값이 바뀌어도 이 immutable container는 immutable이라고 여겨진다.
    --> 좀 더 열려있음

profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글

관련 채용 정보