책임과 메시지 | 메시지를 따라라

728x90

객체지향의 핵심은 클래스가 아니라 메시지다. 애플리케이션은 단순히 클래스를 정의해서 만들어지는 것이 아니라, 객체들 사이의 '메시지 주고받기'를 통해서 동작한다. 클래스는 단지 그 객체가 어떤 특징을 가질 수 있는지를 보여주는 설명서일 뿐, 실제로 소프트웨어가 움직이는 중심은 객체들이 서로 주고받는 메시지에 있다. 그래서 객체지향을 잘 하려면 객체 그 자체보다는 객체들이 어떻게 서로 이야기하고 협력하는지에 더 집중해야 한다.

객체 중심으로 생각하면 자주 생기는 실수가 있다. 바로 데이터를 먼저 만들고, 그 데이터를 어떻게 다룰지 나중에 고민하는 것이다. 하지만 객체지향은 반대다. 무엇을 할 것인가, 즉 '어떤 행동이 필요한가'를 먼저 생각하고, 그 행동을 할 수 있는 책임 있는 객체를 나중에 찾아야 한다. 다시 말해, 데이터가 아닌 '행동'을 중심에 둬야 한다. 이를 위해 객체를 혼자 떨어진 존재로 보기보다는, 시스템 안에서 다른 객체들과 함께 협력하는 존재로 보는 시각이 필요하다.

그래서 책임-주도 설계가 중요하다. 이 설계 방식은 "어떤 행동이 필요한가?"라는 질문에서 출발한다. 이것을 'what'이라고 부르고, 그 다음에 "누가 이 행동을 해야 할까?"라고 묻는 것이 'who'다. 이 순서를 지키는 것이 중요하다. 어떤 객체가 어떤 일을 할 수 있는지가 아니라, 어떤 일이 필요한지를 먼저 보는 것이다. 이 방식으로 생각하면, 자연스럽게 어떤 객체가 어떤 메시지를 받아야 하고, 어떤 메시지를 보낼 수 있는지가 드러난다. 그 메시지들의 모음이 바로 객체의 인터페이스다.

'묻지 말고 시켜라'라는 말도 이와 관련이 있다. 객체지향에서는 다른 객체의 상태를 일일이 물어보며 결정을 대신 내려주기보다는, 그 객체가 알아서 하도록 맡겨야 한다. 예를 들어, "너 지금 기분이 어때? 그러면 이렇게 해"라고 묻지 말고, 그냥 "이 일을 해줘"라고 말하는 게 맞다는 뜻이다. 샌디 메츠는 이것을 "무엇을 할지는 말하되, 어떻게 할지는 지시하지 말라"고 표현했다. 이게 바로 자율성을 존중하는 방식이다. 이렇게 하면 객체 사이의 연결고리가 느슨해지고, 설계가 훨씬 유연해진다.

결국 객체지향의 좋은 설계는 메시지를 중심으로 객체들의 협력 관계를 만들어가는 데서 시작된다. 메시지를 먼저 생각하고, 메시지를 수신할 적절한 객체를 찾는 것. 이렇게 하면 객체들이 자율적인 책임을 갖게 되고, 시스템 전체가 더 견고하고 유연해진다. 어떤 객체가 필요한지 고민하기 전에, 어떤 메시지가 필요한지를 먼저 고민하자. 메시지를 따라가다 보면 자연스럽게 필요한 객체와 역할이 드러난다. 메시지를 믿으면, 올바른 객체지향 설계가 따라온다.

728x90