반응형
정의
객체 생성 이후에는 객체의 상태가 바뀌지 않는 객체
장점
- 이해하기 쉽고 안정적인 서비스 개발에 도움이 된다.
- immutable 객체는 map, set, cache에 쓰기에 적절하다.
- (일반적으로) thread-safe 하다.
- race condition 없이 여러 스레드에서 공유해서 사용할 수 있다.
- 불변 객체를 필드로 쓰면 방어적 복사를 할 필요가 없다.
- String 은 java의 대표적인 불변 객체
사용 방식
public final class Test {
private final int parameter1;
private final RGB rgb;
public Test(String paramter1, RGB rgb) {
this.parameter1 = parameter1;
this.rgb = new RGB(rgb.r, rgb.g, rgb.b);
}
public String getParameter1() {
return parameter1;
}
public String getRGB() {
return new RGB(rgb.r, rgb.g, rgb.b);
}
}
- private final 키워드 사용
- setter 제거
- 값이 바뀌는 걸 막기
- 자녀 클래스의 메서드 override 금지 -> 클래스 상속 금지
- final class 적용
- mutable 객체의 레퍼런스를 공유해서 사용하지 말 것, 이를 위해 방어적 복사를 활용
- 필드가 List 일 경우
- immutable한 값인 경우, 얕은 복사로 new ArrayList<>(); 를 사용
- mutable한 값인 경우, 값 전체를 새로운 new 객체로 만들어 다시 새로 만들어야 함
참조: https://www.youtube.com/watch?v=EOGOJdBy2Rg
반응형