💡 String
은 불변 객체임
만드는 방법
1. final
키워드를 붙인다.
2. Setter
를 만들지 않는다.
// Address 클래스
public class Address{
private final String value; // final을 통해 값 변경 불가능
public Address(String value){
this.value = value;
}
public String getValue(){ // Setter를 생략해서 값 변경 불가능
return value;
}
}
public class Member { // Member 클래스
private String name;
private Address address;
public MemberV2(String name, Address address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
// main문
Address address = new Address("서울");
Member memberA = new Member("회원A", address);
Member memberB = new Member("회원B", address);
//회원A, 회원B의 처음 주소는 모두 서울
System.out.println("memberA = " + memberA); // 서울
System.out.println("memberB = " + memberB); // 서울
//회원B의 주소를 부산으로 변경해야함
//memberB.getAddress().setValue("부산"); //컴파일 오류 (final, setter때문에)
memberB.setAddress(new ImmutableAddress("부산")); // new 키워드로 새로 만듬
System.out.println("memberA = " + memberA); // 서울
System.out.println("memberB = " + memberB); // 부산
}