인프런 커뮤니티 질문&답변

show_3_님의 프로필 이미지
show_3_

작성한 질문수

김영한의 실전 자바 - 중급 1편

불변 객체 질문합니다.

해결된 질문

작성

·

136

·

수정됨

0

ImmutableAddress에서 value를 final로 설정했는데

MemberV2에서 setAddress를 쓸 수 있는 건가요?

final로 선언하면 setter를 못 쓴다고 알고 있어서 질문합니다.

(불변 객체 - 값 변경 강의입니다.)

package immutable.address;

public class ImmutableAddress {

    private final String value;

    public ImmutableAddress(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "Address{" +
                "value='" + value + '\'' +
                '}';
    }
}
package immutable.address;

public class MemberV2 {

    private String name;
    private ImmutableAddress address;

    public MemberV2(String name, ImmutableAddress address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ImmutableAddress getAddress() {
        return address;
    }

    public void setAddress(ImmutableAddress address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "MemberV1{" +
                "name='" + name + '\'' +
                ", address=" + address +
                '}';
    }
}

답변 1

0

안녕하세요. show_3_님, 공식 서포터즈 OMG입니다.

Member의

private ImmutableAddress address;의 경우

address는 final을 선언한 불변이 아니기 때문에 address 는 변경이 가능합니다 😀

(private final ImmutableAddress address;)

.

한번 정의된 주소는 변경이 불가능하지만, 사람이 갖는 주소는 변경이 가능하므로 해당 시나리오를 빗댄 예시입니다 😀

불변으로 지정한 대상이 주소라는 개념의 주소값 인지, 주소를 갖는 사람인지를 파악하여 이해하시면 될 것 같습니다 ^^

감사합니다.

show_3_님의 프로필 이미지
show_3_

작성한 질문수

질문하기