티스토리 뷰

의도는 메시징이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려 있다.

 

군중 속에서 책임이 분산되어 흩어지면 책임을 무시하려고 합니다. 이를 책임감 분산이라고 부릅니다. 명확한 책임이 존재하지 않으면 이를 타인의 책임으로 회피해버립니다.

 

실제 응급 환자 발생 시 훈련했을 때 도움을 청할 대상을 특정하여 도움을 요청하라고 교육받은 경험이 있습니다. '도와주세요'라고만 말하면 이는 타인의 책임으로 인식하여 개인의 실질적인 행동으로 이어지지 않을 수도 있기에 이처럼 교육하는 것 같습니다. 여기서 중요한 점은 명확한 책임과 역할을 가지고 협력에 참여해야 한다는 점입니다.

자율적인 책임

객체지향 공동체를 구성하는 기본 단위는 자율적인 객체입니다. 객체 행동의 유일한 이유는 다른 객체로부터 요청을 수신했기 때문입니다. 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 합니다.

 

협력에서 메시지가 들어왔을 때 해당 동작에 대한 책임은 있지만 구체적인 방법이나 절차는 자유를 가지게 됩니다. 그러나 메시지에 책임에 대한 방법이나 절차가 담겨 있다면 자유를 잃어버리게 됩니다. 메시지를 통해서는 단순히 책임만 전달해야 합니다.

 

하지만 너무 추상적인 책임 또한 문제가 될 수 있습니다. 추상화는 유연성을 가져오기도 하지만 때로는 의도를 잃어버리는 상황도 존재합니다. 유연성을 가지지만 의도를 담은 적절한 책임을 전달해야 합니다.

 

이를 지키기 위한 간단한 방법은 어떻게를 전달하는 것이 아닌 무엇을 해야 하는지 전달해야 합니다.

메시지와 메서드

메시지를 전송할 때 추가적인 정보가 필요한 경우 인자를 통해 추가 정보를 제공할 수 있습니다. 객체는 이를 활용하여 책임에 대한 행동을 수행할 수 있습니다. 이 과정에서 외부의 객체는 메시지에 대해서만 볼 수 있고 객체 내부는 볼 수 없기에 자연스럽게 객체의 외부와 내부가 분리됩니다.

 

객체가 메시지를 처리하기 위해 내부적으로 선택하는 방법을 메서드라고 합니다. 객체는 메시지를 수신하면 해당 메시지를 처리할 수 있는지를 먼저 파악한 후 알맞은 메서드를 선택해 동작을 수행합니다.

 

송신자는 수신자에 대한 최소한의 정보만 가지고 있어야 합니다. 이러한 설계는 아래와 같은 장점을 가질 수 있습니다.

협력이 유연해진다.

수신자에 대한 어떠한 가정도 하지 않기에 수신자가 교체되더라도 파급효과 없이 유연하게 변경할 수 있습니다.

협력이 수행되는 방식을 확장할 수 있다.

송신자에게 아무런 영향도 미치지 않고 수신자를 교체할 수 있기에 세부적인 수행 방식을 쉽게 수정할 수 있습니다.

협력이 수행되는 방식을 재사용할 수 있다.

다양한 문맥에서 협력을 재사용할 수 있습니다. 이는 협력에 영향을 미치지 않고 수신자를 대체할 수 있기에 가능한 일입니다.

메시지를 따라라

객체지향의 핵심은 메시지이기 때문에 클래스에 초점을 맞추게 된다면 유연하지 못하고 확장하기 어렵게 만들 수 있습니다. 실제로 객체는 클래스 없이도 표현할 수 있습니다. 그렇기에 클래스는 추상화를 돕는 도구라고 생각하는 것이 유연한 설계로 다가갈 수 있게 합니다.

 

메시지가 아닌 데이터에 의존하게 되더라도 설계가 무너지게 됩니다. 데이터에 초점을 맞추게 되면 내부 구조를 객체 정의의 일부로 만들기 때문에 객체의 자율성이 저하됩니다. 객체의 내부 구조는 감춰져야 합니다. 외부의 객체가 객체 내부를 마음대로 조작할 수 있다면 객체의 자율성이 떨어지게 됩니다.

 

따라서 어떤 객체가 필요한지를 생각하지 말고 어떤 메시지가 필요한지 먼저 고민해봐야 합니다. 메시지를 결정한 후 이 메시지를 처리할 객체를 선택해야 합니다. 그 과정에서 객체는 다른 객체의 상태를 묻지 않도록 해야 합니다. 메시지를 온전히 믿을 수 있도록 해야 합니다.

객체 인터페이스

일반적으로 인터페이스는 다음과 같은 세 가지 특징을 지니고 있습니다.

  • 인터페이스의 사용법을 익히기만 하면 내부 구조나 동작 방식을 몰라도 쉽게 대상을 조작하거나 의사를 전달할 수 있다.
  • 인터페이스 자체는 변경하지 않고 단순히 내부 구성이나 작동 방식만을 변경하는 것은 인터페이스 사용자에게 아무런 영향도 미치지 않는다.
  • 대상이 변경되더라도 동일한 인터페이스를 제공하기만 하면 아무런 문제 없이 상호작용 할 수 있다.

마치며

결론적으로는 객체의 자율성이 협력의 품질을 결정하게 됩니다. 자율적일수록 객체의 존재 이유를 명확하게 설명할 수 있습니다. 또한 자율적일수록 적절히 추상화되고 응집도가 높아지며 결합도가 낮아지며 캡슐화가 증진되고 인터페이스와 구현이 분리되고 설계의 유연성과 재사용성이 향상됩니다. 이를 잘 이해하는 것이 중요합니다.

'도서 > 객체지향의 사실과 오해' 카테고리의 다른 글

함께 모으기  (0) 2022.10.05
객체 지도  (0) 2022.08.04
역할, 책임, 협력  (0) 2022.07.20
타입과 추상화  (0) 2022.06.18
이상한 나라의 객체  (0) 2022.06.16
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday