불변 객체


<aside> 🦽

설명


image.png

예제


<aside> 🎹

설명


해당 값이 변경되는 필드 값을 private final로 지정을 해놓으면 한 번 설정된 주소 안의 값은
변경되지 않음

private final String value;
와 같이 설정을 하면 이제 생성자를 통해서만 값을 설정 가능하고, 이후에는 값을
변경하는 것이 불가능

!!주의점
public void setValue(String value) {
		this.value = value;
}
와 같이 값을 외부에서 지정 가능하도록 하는 메소드는 생성하면 안됌

</aside>

예제2


<aside> 🕝

package address;

public class MemberMainV2 {
    public static void main(String[] args) {
        ImmutableAddress address = new ImmutableAddress("서울");
        MemberV2 memberA = new MemberV2("􀴥􀨗A", address);
        MemberV2 memberB = new MemberV2("􀴥􀨗B", address);
        //􀴥􀨗A, 􀴥􀨗B􀩄 􀭊􀨺 􀪱􀣗􀗗 􀝽􀙁 􀢲􀨎
        System.out.println("memberA = " + memberA);
        System.out.println("memberB = " + memberB);
//􀴥􀨗B􀩄 􀪱􀣗􀜳 􀠗􀢑􀨵􀛽 􀟸􀒃􀳧􀦠􀳣
//memberB.getAddress().setValue("􀠗􀢑"); //􀮹􀱵􀩌 􀧟􀜨
        memberB.setAddress(new ImmutableAddress("부산"));
        System.out.println("􀠗􀢑 -> memberB.address");
        System.out.println("memberA = " + memberA);
        System.out.println("memberB = " + memberB);
    }
}

</aside>

image.png

객체 생성 방법 참고

// 방법 1: 별도로 객체를 변수에 저장한 뒤 전달
ImmutableAddress newAddress = new ImmutableAddress("부산");
memberB.setAddress(newAddress);

// 방법 2: 객체 생성과 동시에 메서드에 전달
memberB.setAddress(new ImmutableAddress("부산"));