728x90
Immutable Object
- 불변객체란 한번 객체가 생성되면 그 상태를 바꿀 수 없는 객체
- JAVA의 대표적인 불변객체는 String이 있다.
JAVA의 String
// ex)
String str = "abc";
str = "def";
위 예제는 str변수의 값이 바뀐 것이라고 착각하기 쉽다.
하지만 "def"라는 새로운 객체가 생성되고 str변수가 "def"를 참조 한 것이다.
원래 "abc"객체의 값은 그대로 "abc"로 남아있다. 더이상 참조되지 않는 것이다.
불변객체는 new 인스턴스로 재할당하는 것 외에는 값을 바꿀 수 없다.
Immutable Object 정의 방법
- "setter" 메소드를 사용하지 않는다.
- 모든 필드(field)를 final, private 사용.
- 상속 받는 subclass가 해당 메소드를 오버라이딩하게 하지 않는다.(간단한 방법은 final 클래스로 선언)
- 인스턴스 필드가 가변 객체에 포함되어 참조 되면 해당 객체가 변하게 하지 말 것.(가변 객체에 제공 하지 않는다)
Immutable Object 장단점
장점
- 불변이기에 객체에 대한 신뢰도가 높아진다(객체가 안전하다).
- 생성자, 접근 메소드에 대한 방어 복사가 필요 없다.
- 멀티 스레드 환경에서 동기화 처리 없이 객체를 공유 할 수 있다.
단점
- 객체가 가지는 값마다 새로운 객체가 필요하다.
- 메모리 누수와 새로운 객체를 계속 생성하기 때문에 성능 저하를 발생시킬 수 있다.
728x90
'Java & Spring' 카테고리의 다른 글
[JAVA] Overloading 오버로딩 (0) | 2022.03.24 |
---|---|
[JAVA] Overriding 오버라이딩 (0) | 2022.03.23 |
[JAVA] String, StringBuilder, StringBuffer 차이 (0) | 2022.03.21 |
[JAVA] StringBuilder 사용법. 특징 (0) | 2022.03.20 |
[JAVA] contains() 사용법. 특정 문자열 포함 여부 (0) | 2022.03.19 |