내일배움캠프 15일차 TIL : Java - 불변 객체

김원기·2024년 5월 10일

TIL

목록 보기
19/42
post-thumbnail

저번에 String을 정리할 때 reference 어쩌구하면서

String은 불변성을 가지고 있다.

라고 했는데 불변 객체를 조금 더 정리해볼 예정이다.

불변 객체 Immutable Object

불변 객체란 객체 지향 프로그래밍에있어서 객체를 생성한 후 그 상태를 바꿀 수 없는 객체를 말한다.

객체가 가지고 있는 필드가 변하지 않는 객체를 불변 객체라 한다.

불변 객체의 장점

불변 객체를 사용하면 값이 변경되지 않는 점 때문에 인스턴스에 대한 신뢰도가 높아진다.

Thread상에서 안전하다 => 동일한(변경되지 않는 값)을 가지고 있기 때문에 동기화를 신경쓰지 않아도 된다.

불변 객체의 단점

불변 객체에 새로운 값이 필요할 때 마다 새로운 객체가 생성되기 때문에 리소스의 소모가 심하다.

-> String에서 다뤘던 것 처럼 같은 변수명을 가지고 다른 곳을 참조하는 새로운 객체가 생성되는 것과 동일하다.

불변 객체를 왜 쓸까?

불변 객체를 사용하면 복제나 비교를 위한 조작을 단순화 할 수 있고, 성능 개선에도 도움을 준다.

하지만 객체가 변경 가능한 데이터를 많이 가지고 있는 경우에는 불변 객체를 사용하는 것이 부적절 할 수 있다.

값을 공유하기 때문에 발생하는 문제들을 해결하고 방지하기 위해 불변 객체가 적용된다.

불변 객체는 어떻게 만들지?

원시 타입에서의 불변

원시 타입은 참조 값이 존재하지 않기 때문에 값을 그대로 외부로 내보내는 경우에도 내부 객체는 불변이다.

원시 타입에서는 Setter를 생성하지 않는 것 만으로 원시 타입으로 이루어진 객체는 불변으로 만들 수 있다.

참조 타입에서의 불변

원시 타입이 아닌 경우에는 조금 더 까다로운 형태로 불변 객체를 생성해야 한다.

https://tecoble.techcourse.co.kr/post/2020-05-18-immutable-object/

에 예시와 설명이 자세하게 설명되어 있다.

끝!

참조 타입에서의 불변은 계속 봐도 내가 설명하면 더 복잡해질 것 같아서...

profile
혼자 공부하는 블로그라 부족함이 많아요 https://www.notion.so/18067a27ac7e4f4790dde645fb3bf3d3?pvs=4

0개의 댓글