✏️3.17 메시지 체인
메시지 체인
클라이언트가 한 객체를 통해 다른 객체를 얻은 뒤 방금 얻은 객체에 또 다른 객체를 요청하는 식으로, 다른 객체를 요청하는 작업이 연쇄적으로 이어지는 코드를 말한다.
🧷 getSomething()
같은 게터가 꼬리를 물고 이어지거나 임시 변수들이 줄줄이 나열되는 코드가 있을 때, 클라이언트가 객체 내비게이션 구조에 종속됐음을 의미한다. 내비게이션 중간 단계를 수정하면 클라이언트 코드도 수정해야된다.
📍 위임숨기기: 메시지 체인의 다양한 연결점에 적용할 수 있다.
→ 원칙적으로 체인을 구성하는 모든 객체에 적용할 수 있지만, 중간 객체들이 모두 중개자가 돼버리기 쉽다. 최종 결과 객체가 어떻게 쓰이는지부터 살펴보는게 좋다.
📍 함수 추출하기: 결과 객체를 사용하는 코드 일부를 따로 빼낸다.
📍 함수 옮기기: 체인을 숨길 수 있는지 살펴보자.
체인을 구성하는 객체 중 특정 하나를 사용하는 클라이언트 중 그 이후 객체들도 사용하길 원하는 클라이언트가 있따면, 이 요구를 처리해줄 메서드를 추가한다.
🧷 예시
이 체인의 최종 결과 객체는 name
이 반환하는 부서장의 이름이다.
여기서 보고서 생성 로직을 함수로 추출한 다음 적당한 모듈로 옮기면 체인의 존재가 감춰진다.
마지막으로 체인의 중간인 부서 정보를 얻어 사용하는 다수의 클라이언트가 부서장 이름도 함께 사용한다면 부서 클래스에 managerName()
메서드를 추가하여 체인을 단축할 수 있다.
Last updated