inflearn logo
강의

Course

Instructor

Kim Young-han's Practical Java - Intermediate Level 1

Immutable Object - Example

멤버B의 주소 바꿔주는 방법에 관한 질문

235

dizzydimm

6 asked

0

 [질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
강의중에 나온 이부분에 관해 질문이 있습니다.

memberB.getAddress().setValue("부산");

memberB.setAddress(new ImmutableAddress("부산"));

여기서, 멤버B의 주소를 바꿔 줄때,

memberB.getAddress().setValue("부산"); 를 하셨는데, 그냥 memberB.setValue("부산"); 라고 하면 안돼는 이유가 무엇인지 너무 궁금 합니다

java 객체지향

Answer 4

1

codetrain999

안녕하세요. dizzydimm님, 공식 서포터즈 코즈위버입니다.

회원의 주소를 변경하는 코드에 관한 질문이네요.

 

memberB.setValue(""); 형태로 값을 설정하기 위해선 Member 클래스가 다음과 같은 필드를 가지고 있어야 합니다.

public class Member {
    private String value;
}

그러나 Member 클래스 안의 Address 클래스 안의 value 를 변경해야 하므로 memberB.getAddress().setValue(); 형태로 사용해야 합니다.

 

혹시 질문하신 내용과 맞지 않는 답변이라면 추가 답변을 달아주세요

감사합니다.

0

dizzydimm

이해 했습니다. 감사합니다.

1

thinking1dev1person

dizzydimm님

memberB.getAddress().setValue("부산"); 를 하셨는데, 그냥 memberB.setValue("부산"); 라고 하면 안돼는 이유가 무엇인지 너무 궁금 합니다

라는 말이?

memberB라는 클래스에 value값을 추가하고 그 값을 부산으로 넣자는 말인가요? - 확인 부탁드립니다.

저가 이해 한게 맞다면, "부산" 이라는 정보만 다룬다면,

memberB.setValue("부산"); 이렇게 해도 무방할 것 같습니다.

하지만, 여러가지의 정보를 다룬다면 memberB.getAddress().setValue("부산");

하는게 더 좋을것 같다고 생각합니다.(공부하는 입장 에서 개인 적인 생각이에요.)

저가 dizzydimm님의 말을 이해 한게 틀리다면 무시해도 좋습니다.

0

dizzydimm

예. 맞습니다. 그냥 바로 바꿔줘도 될텐데라고 생각을 했어요.

답변 감사합니다.

0

lv3

memberB.setAddress("부산"); -> 사용시 Address 객체 자체가를 변환합니다.

반면에 memberB.getAddress().setValue("부산"); -> 사용시 Address 객체에 대한 참조값을 그대로 이고, 그 안에 address 변수 값만 변합니다.

setAddress를 사용하시려면, new Address를 하셔서 새로운 객체를 생성 후, 그 값을 인자로 전달해주어야 하고, setValue는 String값만 전달해주면 됩니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. dizzydimm님.

질문해주신 내용에 대해 관련된 답변을 드리겠습니다.

질문하신 memberB.getAddress().setValue("부산");memberB.setAddress(new ImmutableAddress("부산"));의 차이는 불변객체의 원칙에 관한 것입니다.

  1. memberB.getAddress().setValue("부산");: 이 코드는 현재의 memberB 객체의 주소를 변경하는 방법으로 가변 객체에서 사용됩니다. 하지만 이러한 방법은 객체의 무결성을 보장하지 않을 수 있습니다.
  2. memberB.setAddress(new ImmutableAddress("부산"));: 이는 불변 객체의 원칙을 지키며 새로운 객체를 만들어 할당하는 방식입니다. 이 방식이 더 안전하고 예기치 않은 부작용을 방지할 수 있습니다.

비슷한 질문이 이전에 여러 번 논의된 바 있습니다. 아래 링크를 통해 자세한 설명을 참고하실 수 있습니다:

  1. 불변 객체 강의 중
  2. 수업 중 질문
  3. “챕터 2 - 불변 객체 - 예제” 에서 나온 코드들이 실무에서 자주 사용하는지?

이 외에도 불변객체 관련 강의를 더 진행하시면서 학습해보시면 이해가 더욱 명확해질 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

문제와 풀이

0

19

1

섹션 2 퀴즈 9번

0

29

2

강의노트 내용이 이해가 되지 않아서 문의드립니다.

0

46

1

중급1편, 래퍼클래스 문제와풀이2 로또제너레이터 질문

0

65

1

setVlaue질문

0

88

3

안녕하세요 코딩테스트와 병행하고 싶어서 질문드립니다.

0

91

1

findValue의 파라메터까지 래퍼클래스 배열인 이유가 있을까요?

0

72

1

아래 글처럼 toString() 강의부터 화면이 안보여요

0

95

2

TemporalAdjusters의 lastDayOfNextMonth(), lastDayOfNextYear() 메서드 지원 안함

0

83

2

오타 제보도 되나요?

0

88

2

지역 클래스 예제3 지역변수 질문

0

66

2

래퍼클래스 박싱 출력

0

58

1

자바 equals() 메소드에 대한 물리적 동일성, 논리적 동등성 질문

0

104

3

강의록 오타 제보

0

66

2

자바의 기본 클래스들에 관하여

0

69

1

실무에서 중첩(내부) 클래스 사용하나요?

0

78

1

지역 클래스 - 지역 변수 캡처3

0

52

1

12:30 의 newClassGrade 질문이 있습니다.

0

52

1

날짜와 시간 문제풀이가 막히는데

0

97

2

내부 클래스의 바깥 클래스 참조

0

66

1

스트링 풀, new String()

0

105

3

정적 중첩 클래스 사용 이유

0

97

1

status.getCode() 대신 status.code 사용

1

79

1

메서드의 지역변수명과 내부클래스의 멤버메서드에서의 지역변수명의 중복관련

0

74

1