mutable, immutable
class 의 instace 가 생성된 시점부터 내부상태가 변경되는가에 따라 불변객체와 가변객체로 나뉜다.
class 의 instance 가 생성된 시점부터 내부상태가 일정하게 유지되는 객체이다.
즉, “생성 후 변경이 불가능한 객체” 이다.
대표적인 예시로는 String
클래스가 있다
class 의 instance 가 생성된 시점부터 내부상태가 변경될 수 있는 객체이다.
즉 “생성 후 변경이 가능한 객체” 이다.
대부분의 객체가 가변객체이며, VO
, POJO
, StringBuilder/Buffer
또한 가변객체이다
불변객체는 instance 생성시점 즉 메모리에 올라간 시점부터 변경이 불가능하여 자동적으로
thread-safe 한 특성을 띄고있다. 객체 자체가 Read-only 이기 때문이다.
하지만, 가변객체는 Writtable 특성을 띄고 있어, 그 자체로는 thread-safe 하지 않고, 추가적으로 동기화 처리를 해주어야한다. 여러 쓰레드에서 수정하려고 시도하였을 경우, CPU 메모리와 메인메모리간의 값이 동일하다고 보장할 수 없기 때문이다.
간단하다. 객체를 Read-only 로 만들면 된다