"챕터 2 - 불변 객체 - 예제" 에서 나온 코드들이 실무에서 자주 사용하는지?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요. "챕터 2- 불변객체 예제"에서 회원의 주소를 변경할때 가변 객체 에서의 MemberMainV1의 코드를 보면,
memberB.getAddress().setValue("부산"); 이런식 으로 하셧고,
불변 객체의 에서의 MemberMainV2의 코드를 보면,
memberB.setAddress(new ImmutableAddress("부산")); 이런식으로 하셨는데.
이런 코드들이 실무에서 얼마나 자주 사용하는지 궁금 합니다.
공부하면서 이런 코드들은 본적이(저한테는 특이한 코드 여서) 없어서 질문을 남깁니다.
답변 부탁드립니다.
답변 2
3
안녕하세요. 생각하는자님, 공식 서포터즈 y2gcoder입니다.
실무에서는 불변 객체를 생각하신 것보다 더 자주 사용하게 됩니다. 특히 도메인 주도 설계(DDD)에서 값 객체를 모델링할 때 잘 활용하고 있습니다. 학습하신 것과 같이 값객체는 변하지 않는 속성을 가진 객체로 한 번 생성되면 그 상태가 변하지 않습니다. 이는 사용할 때 데이터의 무결성과 Thread-safe한 동작을 보장하는 데 도움을 줍니다.
특히 예시와 같이 주소 정보와 같은 객체는 여러 도메인에서 공통적으로 사용될 수 있습니다. 이 때 주소 정보가 의도치 않게 변경되는 문제를 예방하기 위해 불변 객체로 구현하게 됩니다. 불변 객체로 구현하게 되면 변경이 필요할 때는 새로운 객체를 생성해서 반환해야 하기 때문에, 데이터 변경 관리를 더 엄격하게 하여 코딩할 때의 안정성을 올려주고, 오류 가능성을 줄여줄 수 있다고 생각합니다.
여담입니다만 자바-백엔드 쪽이 아니더라도 다른 언어 및 프레임워크에서 불변성을 이용하는 경우는 종종 있는 것 같습니다. 예전에 잠시 업무를 위해 리액트를 공부했을 때, 전역 상태 관리 라이브러리인 리덕스를 공부했을 때가 있었습니다. 그 때도 상태 업데이트를 해주기 위해서는 단순히 상태값을 변경하는 것이 아니라 변하지않는 상태들을 포함한 새 오브젝트를 만들어 반환해주는 것으로 불변성을 지켜야 제대로 작동해줬던 것으로 기억합니다. (현재는 달라졌을 수도 있습니다!)
감사합니다.
1

이부분을 보다가
getValue /setValue 부분이 생겼는데 혹시 이부분은 무엇을 뜻하나요?
또한 해설부분은 어디서 볼수있나요?
1
찾아보니 자바-basic 부분에서 간간히 써 왔습니다.
value의 값이 private라서 Address address = new Address("지역-부산");
System.out.println(addres.value); address.value = "지역-서울"; 이런식 으로 할수 없습니다. 그래서 value를 보여주기 위해서 getValue, value의 값을 변경하기 위해서 setValue(내용)을 씁니다.
java-basic "접근제어자" 를 보시면 이해 가능 하실 거에요.
그래도 이해가 불가능 한다면 자바 getter setter 이렇게 검색해 보세요.
문제와 풀이
0
25
1
섹션 2 퀴즈 9번
0
34
2
강의노트 내용이 이해가 되지 않아서 문의드립니다.
0
48
1
중급1편, 래퍼클래스 문제와풀이2 로또제너레이터 질문
0
68
1
setVlaue질문
0
95
3
안녕하세요 코딩테스트와 병행하고 싶어서 질문드립니다.
0
95
1
findValue의 파라메터까지 래퍼클래스 배열인 이유가 있을까요?
0
76
1
아래 글처럼 toString() 강의부터 화면이 안보여요
0
99
2
TemporalAdjusters의 lastDayOfNextMonth(), lastDayOfNextYear() 메서드 지원 안함
0
84
2
오타 제보도 되나요?
0
91
2
지역 클래스 예제3 지역변수 질문
0
69
2
래퍼클래스 박싱 출력
0
60
1
자바 equals() 메소드에 대한 물리적 동일성, 논리적 동등성 질문
0
107
3
강의록 오타 제보
0
69
2
자바의 기본 클래스들에 관하여
0
71
1
실무에서 중첩(내부) 클래스 사용하나요?
0
81
1
지역 클래스 - 지역 변수 캡처3
0
57
1
12:30 의 newClassGrade 질문이 있습니다.
0
57
1
날짜와 시간 문제풀이가 막히는데
0
100
2
내부 클래스의 바깥 클래스 참조
0
68
1
스트링 풀, new String()
0
105
3
정적 중첩 클래스 사용 이유
0
97
1
status.getCode() 대신 status.code 사용
1
82
1
메서드의 지역변수명과 내부클래스의 멤버메서드에서의 지역변수명의 중복관련
0
75
1





