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

생각하는자님의 프로필 이미지
생각하는자

작성한 질문수

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

불변 객체 - 예제

"챕터 2 - 불변 객체 - 예제" 에서 나온 코드들이 실무에서 자주 사용하는지?

해결된 질문

작성

·

369

·

수정됨

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요. "챕터 2- 불변객체 예제"에서 회원의 주소를 변경할때 가변 객체 에서의 MemberMainV1의 코드를 보면,

memberB.getAddress().setValue("부산"); 이런식 으로 하셧고,

불변 객체의 에서의 MemberMainV2의 코드를 보면,

memberB.setAddress(new ImmutableAddress("부산")); 이런식으로 하셨는데.

이런 코드들이 실무에서 얼마나 자주 사용하는지 궁금 합니다.

공부하면서 이런 코드들은 본적이(저한테는 특이한 코드 여서) 없어서 질문을 남깁니다.

답변 부탁드립니다.

답변 1

2

안녕하세요. 생각하는자님, 공식 서포터즈 y2gcoder입니다.

실무에서는 불변 객체를 생각하신 것보다 더 자주 사용하게 됩니다. 특히 도메인 주도 설계(DDD)에서 값 객체를 모델링할 때 잘 활용하고 있습니다. 학습하신 것과 같이 값객체는 변하지 않는 속성을 가진 객체로 한 번 생성되면 그 상태가 변하지 않습니다. 이는 사용할 때 데이터의 무결성과 Thread-safe한 동작을 보장하는 데 도움을 줍니다.

특히 예시와 같이 주소 정보와 같은 객체는 여러 도메인에서 공통적으로 사용될 수 있습니다. 이 때 주소 정보가 의도치 않게 변경되는 문제를 예방하기 위해 불변 객체로 구현하게 됩니다. 불변 객체로 구현하게 되면 변경이 필요할 때는 새로운 객체를 생성해서 반환해야 하기 때문에, 데이터 변경 관리를 더 엄격하게 하여 코딩할 때의 안정성을 올려주고, 오류 가능성을 줄여줄 수 있다고 생각합니다.

여담입니다만 자바-백엔드 쪽이 아니더라도 다른 언어 및 프레임워크에서 불변성을 이용하는 경우는 종종 있는 것 같습니다. 예전에 잠시 업무를 위해 리액트를 공부했을 때, 전역 상태 관리 라이브러리인 리덕스를 공부했을 때가 있었습니다. 그 때도 상태 업데이트를 해주기 위해서는 단순히 상태값을 변경하는 것이 아니라 변하지않는 상태들을 포함한 새 오브젝트를 만들어 반환해주는 것으로 불변성을 지켜야 제대로 작동해줬던 것으로 기억합니다. (현재는 달라졌을 수도 있습니다!)

감사합니다.

y2gcoder님의 말을 전부다 이해는 못하였지만.. 절대로 이것을 익혀야 한다는 것은 알게 되었네요. 감사합니다.

생각하는자님의 프로필 이미지
생각하는자

작성한 질문수

질문하기