java
코드 복사
import java.util.Date;
public class User {
private final String name;
private final Date birthDate; // 가변 객체
public User(String name, Date birthDate) {
this.name = name;
this.birthDate = new Date(birthDate.getTime()); // 방어적 복사
}
public Date getBirthDate() {
return new Date(birthDate.getTime()); // 방어적 복사
}
}
위의 User
클래스에서 birthDate
는 Date
객체로, 가변 객체입니다. 생성자와 getter에서 방어적 복사를 사용하여 Date
객체의 원본 상태가 외부에서 변경되지 않도록 합니다.
방어적 복사는 특히 API 설계나 불변 객체를 사용할 때 중요한 개념이며, 객체 지향 프로그래밍에서 객체의 상태 관리와 관련된 문제를 방지하는 데 유용합니다.
네, 맞습니다! 객체 지향 프로그래밍에서 참조 타입의 특성을 이해하는 것이 중요합니다. birthDate
가 가변 객체(예: Date
)로 선언되어 있기 때문에, 이 객체를 반환할 때 반환된 참조를 통해 외부에서 객체의 상태를 변경할 수 있습니다.
Date
와 같은 가변 객체는 상태가 변경될 수 있는 객체입니다. 따라서 그 객체에 대한 참조를 외부에 제공하면, 외부 코드에서 객체의 상태를 변경할 수 있습니다.