냄새 17. 메세지 체인

    들어가기 전

    이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.


    냄새 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

    댓글

    Designed by JB FACTORY