반응형
불변 객체와 가변 객체는 Multi Thread 환경에서 개발할 때 이해해야 할 중요한 개념입니다.
일단은 단어에 대한 설명만 살펴보면
불변 객체
Java에서 Class의 인스턴스가 생성 된 후 상태가 변하지 않는 객체, Multi Thread 환경에서 안전하게 사용할 수 있다는
신뢰성이 보장됩니다.
가변 객체
Java에서 Class의 인스턴스가 생성 된 후 상태가 변할 수 있는 객체, Multi Thread 환경에서 별도의 동기화 처리가 필요합니다.
이렇게 글로만 보면 무슨 말인지 잘 이해가 안갑니다.
Java에서 Class의 인스턴스가 생성 -> 소스에서 new Class();
상태가 변하지 않는 -> 어렵습니다.. 뭔 상태요..
예를 들어
- 클래스가 있으면 클래스 안의 멤버변수가 Primitive Type, Final 필드 이면서 변경할 수 없는 경우
- 클래스 안의 멤버변수가 Refrence Type 이면서 Final 필드인 경우
- 클래스 안의 멤버변수 클래스의 멤버 변수가 Final인 경우
등 을 불변객체로 볼 수 있습니다. (즉, 클래스의 멤버변수가 변경이 불가능 해야합니다. 멤버변수의 멤버변수조차!!!, 메소드의 필드 변수는 상관없습니다.)
Multi Thread 환경 -> 여러 쓰레드가 동시에 접근하였을 때
이렇게 설명할 수 있습니다.
즉 불변객체는 런타임 환경에서 로직에 의해 클래스의 멤버변수가 변하지 않는 객체라고 볼 수 있을 것 같습니다.
혹시 내용이 알고계신 것과 다른 점이 있으면 언제든 편하게 댓글로 말씀해주세요. 감사합니다~
반응형
'백엔드 > Java' 카테고리의 다른 글
BigDecimal divide 시 에러 (0) | 2022.12.21 |
---|---|
상속과 컴포지션 (1) | 2022.09.16 |
Stream API (0) | 2022.09.09 |
Long 동일성 == 비교 (0) | 2022.08.18 |
JVM (0) | 2022.08.13 |