냄새 17. 메세지 체인
- etc/리팩토링
- 2023. 5. 10.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
냄새 17. 메세지(메서드) 체인 (Message Chains)
- 메세지(메서드) 체인 냄새는 다음을 의미함.
- 레퍼런스를 따라 계속해서 메서드 호출이 이어지는 코드.
- this.member.getCredit().getLevel().getDescription()
- 문제점
- 해당 코드를 사용하는 클라이언트는 코드 체인을 모두 이해해야 함.
- 체인 중 일부가 변경된다면 클라이언트의 코드도 변경해야함.
- 관련 리팩토링
- '위임 숨기기'를 사용해 메세지 체인을 캡슐화를 할 수 있음.
- '함수 추출하기'로 메세지 체인 일부를 함수로 추출한 다음, '함수 옮기기'으로 해당 함수를 적절한 이동을 할 수 있다. (함수 추출하기 → 함수 옮기기)
메서드 체인은 왜 코드의 냄새일까? 메서드 체인은 다음 문제점이 있기 때문이다.
- 메서드 체인을 사용하는 클라이언트가 메서드 체인의 Depth만큼의 정보를 알고 있어야 함.
- 메서드 체인 코드를 읽는 소프트웨어 엔지니어도 이것을 이해하고 있어야 함.
- 메서드 체인의 중간 부분이 변경이 되는 경우, 메서드 체인을 사용하는 모든 코드도 변경되어야 함.
이런 문제점이 있다. 메서드 체인이 너무 길어지거나, 너무 많아진다면 일종의 코드의 냄새가 될 수 있다. 물론 이 부분은 '캡슐화의 정도'에 관한 문제이기 때문에 정답은 없지만, 필요하다면 '메서드 체이닝'을 줄일 필요도 있다. 메서드 체이닝은 다음 방법을 이용해서 줄일 수 있다.
- '위임 숨기기'를 통해 메서드 체이닝 감소.
- 메서드 체이닝을 사용하지 않도록 필요한 함수를 추출하고 이동해서 적절한 클래스에 놔둔다.
'etc > 리팩토링' 카테고리의 다른 글
냄새 18. 중재자 (0) | 2023.05.10 |
---|---|
리팩토링 37. 위임 숨기기 (0) | 2023.05.10 |
냄새 16. 임시 필드 (0) | 2023.05.10 |
리팩토링 36. 특이 케이스 추가하기 (1) | 2023.05.10 |
리팩토링 35. 죽은 코드 제거하기 (0) | 2023.05.10 |