객체의 불변성(Immutability)이란?
객체가 불변(immutable)하다는 것은 생성 후 객체의 상태가 변경되지 않는다는 뜻이다.
즉, 객체를 처음 만들었을 때의 상태를 끝까지 유지한다는 말이다.
불변성의 중요성
불변 객체는 여러 장점이 있다. 가장 큰 장점은 동기화 문제를 피할 수 있다는 것이다.
객체 상태가 바뀌지 않으므로 여러 스레드에서 동시에 접근해도 Thread-safe 하다. 또한, Side Effect가 없어 설계가 용이하며 캐싱에도 유리하다.
Java에서 불변 객체를 만드는 방법
setter 메서드 제공 ❌
객체의 상태값을 변경하는 setter 메서드를 아예 만들지 않는 방법이다.
상태 값을 변경할 필요가 없는 클래스에 setter 메서드를 추가하는 건 불필요하다.
final class 선언
클래스 자체를 final로 선언하면 다른 클래스에서 상속받는 게 불가능하기 때문에 부모 클래스에 선언되어 있는 메서드 오버라이딩이 불가능하다.
모든 필드 final 선언
초기화 이후 필드 값 변경을 방지한다.
모든 필드 private 선언
클래스의 모든 필드를 private으로 선언해 외부 접근을 막아 상태 변경을 방지한다.
생성자와 getter 메서드에서 깊은 복사 사용
참조 타입 필드를 깊은 복사 해 불변성을 유지한다.
생성자와 getter 메서드에서 깊은 복사를 사용하여 원본 배열의 변경으로부터 객체를 보호한다.
✅ 깊은 복사 : '값'을 새로운 메모리 공간에 복사하는 것을 의미.
✅ 얕은 복사 : '주소'를 복사한다는 의미.
'Dev > Java' 카테고리의 다른 글
int 타입과 Integer 타입은 성능 차이가 있는가? (1) | 2024.11.04 |
---|---|
Wrapper Class는 무엇인가? (0) | 2024.10.31 |
다형성 (Polymorphism) (0) | 2024.10.30 |
Gradle은 무엇인가? 의존성 관리는 왜 필요한가? (1) | 2024.10.25 |
final에 대한 이해 (0) | 2024.10.24 |