해결된 질문
작성
·
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님의 말을 전부다 이해는 못하였지만.. 절대로 이것을 익혀야 한다는 것은 알게 되었네요. 감사합니다.