JAVA · 객체지향
불변 객체 설계
불변 객체를 올바르게 설계하는 5가지 규칙을 배웁니다.
객체지향중급불변immutablefinal방어적복사
핵심 설명
불변 객체를 올바르게 설계하는 5가지 규칙을 배웁니다.
Java code
import java.util.*;
// 불변 클래스 설계 5규칙
public final class Money { // 1. final 클래스
private final int amount; // 2. final 필드
private final String currency;
private final List<String> tags; // 가변 객체 포함
// 3. 생성자에서 방어적 복사
public Money(int amount, String currency, List<String> tags) {
this.amount = amount;
this.currency = currency;
this.tags = List.copyOf(tags); // 방어적 복사
}
// 4. getter만 제공 (setter 없음)
public int amount() { return amount; }
public String currency() { return currency; }
// 5. 가변 객체는 방어적 복사로 반환
public List<String> tags() {
return Collections.unmodifiableList(tags);
}
// 값 변경 시 새 객체 반환
public Money add(int value) {
return new Money(this.amount + value, this.currency, this.tags);
}
// record로 더 간단하게
// record Money(int amount, String currency, List<String> tags) {}
}학습 팁
불변 객체는 스레드 안전하고, 캐싱이 가능하며, 부수 효과가 없습니다. 가능하면 record를 사용하세요.
주의할 점
가변 컬렉션을 필드에 직접 할당하면 외부에서 수정할 수 있습니다. List.copyOf()로 방어적 복사를 하세요.
자주 묻는 질문
불변 객체 설계란 무엇인가요?
불변 객체를 올바르게 설계하는 5가지 규칙을 배웁니다.
불변 객체 설계 학습 시 주의할 점은 무엇인가요?
가변 컬렉션을 필드에 직접 할당하면 외부에서 수정할 수 있습니다. List.copyOf() 로 방어적 복사를 하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.