
저번에 String을 정리할 때 reference 어쩌구하면서
String은 불변성을 가지고 있다.
라고 했는데 불변 객체를 조금 더 정리해볼 예정이다.
불변 객체란 객체 지향 프로그래밍에있어서 객체를 생성한 후 그 상태를 바꿀 수 없는 객체를 말한다.
객체가 가지고 있는 필드가 변하지 않는 객체를 불변 객체라 한다.
불변 객체를 사용하면 값이 변경되지 않는 점 때문에 인스턴스에 대한 신뢰도가 높아진다.
Thread상에서 안전하다 => 동일한(변경되지 않는 값)을 가지고 있기 때문에 동기화를 신경쓰지 않아도 된다.
불변 객체에 새로운 값이 필요할 때 마다 새로운 객체가 생성되기 때문에 리소스의 소모가 심하다.
-> String에서 다뤘던 것 처럼 같은 변수명을 가지고 다른 곳을 참조하는 새로운 객체가 생성되는 것과 동일하다.
불변 객체를 사용하면 복제나 비교를 위한 조작을 단순화 할 수 있고, 성능 개선에도 도움을 준다.
하지만 객체가 변경 가능한 데이터를 많이 가지고 있는 경우에는 불변 객체를 사용하는 것이 부적절 할 수 있다.
값을 공유하기 때문에 발생하는 문제들을 해결하고 방지하기 위해 불변 객체가 적용된다.
원시 타입은 참조 값이 존재하지 않기 때문에 값을 그대로 외부로 내보내는 경우에도 내부 객체는 불변이다.
원시 타입에서는 Setter를 생성하지 않는 것 만으로 원시 타입으로 이루어진 객체는 불변으로 만들 수 있다.
원시 타입이 아닌 경우에는 조금 더 까다로운 형태로 불변 객체를 생성해야 한다.
https://tecoble.techcourse.co.kr/post/2020-05-18-immutable-object/
에 예시와 설명이 자세하게 설명되어 있다.
참조 타입에서의 불변은 계속 봐도 내가 설명하면 더 복잡해질 것 같아서...