개념 관점은 도메인 안에 존재하는 개념과 개념들의 관계를 설명하는 것입니다. 명세 관점은 도메인에 초점을 맞추는 것이 아닌 객체들의 책임에 초점을 맞추게 되고 무엇에 집중합니다. 구현 관점은 실제 작업을 수행하는 것과 관련 있습니다. 어떻게 수행할 것인가에 초점을 맞히게 됩니다. 클래스 설계의 방법이 다른 것이 아닌 설계를 진행할 때 위와 3가지 관점 모두 고려해서 설계해야 합니다. 커피 전문점 도메인 커피 주문하는 과정을 천천히 생각해 보세요. 손님이 들어가고 메뉴판을 확인 후 선택한 메뉴를 바리스타에게 주문하게 됩니다. 객체 지향적인 관점으로 해석하면 커피 가게 객체, 손님 객체, 메뉴판 객체, 커피 메뉴 객체, 바리스타 객체가 각자의 역할을 수행하며 협력하고 있는 것으로 해석할 수 있습니다. 객체의..
모르는 장소에서 길을 찾을 때 어떤 방법을 선호하시나요? 대표적인 방법으로는 주변 사람들에게 길을 묻거나 지도를 확인하는 방법이 존재합니다. 길을 묻는 방법은 기능적이고 해결책 지향적인 접근 방법입니다. 하지만 이 방법은 일반적이지도 재사용할 수 있지도 않습니다. 위치는 상대적이기 때문에 시간이 지나면서 정보가 희미해져 갑니다. 지도를 확인하는 방법은 구조적이고 문제 지향적인 접근 방법입니다. 지도는 실제 세계를 추상화시켜 놓은 것이기에 풍부한 컨텍스트 정보가 담겨 있습니다. 이는 재사용 가능하며 길을 찾는 목적 이외에도 다양하게 활용할 수 있습니다. 여기서 주목해야 할 키워드는 기능과 구조입니다. 기능에 초점을 맞추다 보면 변화하는 요구사항에 대응하기 어렵습니다. 하지만 구조가 중심이 된다면 재사용할 ..
의도는 메시징이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려 있다. 군중 속에서 책임이 분산되어 흩어지면 책임을 무시하려고 합니다. 이를 책임감 분산이라고 부릅니다. 명확한 책임이 존재하지 않으면 이를 타인의 책임으로 회피해버립니다. 실제 응급 환자 발생 시 훈련했을 때 도움을 청할 대상을 특정하여 도움을 요청하라고 교육받은 경험이 있습니다. '도와주세요'라고만 말하면 이는 타인의 책임으로 인식하여 개인의 실질적인 행동으로 이어지지 않을 수도 있기에 이처럼 교육하는 것 같습니다. 여기서 중요한 점은 명확한 책임과 역할을 가지고 협력에 참여해야 한다는 점입니다. 자율적인 책임 객체지향 공동체를 구성하는 기본 단위는 자율..
객체지향에 갓 입문한 사람들의 가장 흔한 실수는 협력이라는 문맥을 고려하지 않은 채 객체가 가져야 할 상태와 행동부터 고민하기 시작한다는 것이라고 이 책에서 말하고 있습니다. 저 또한 상태와 행동에 해당하는 필드와 메서드부터 고민을 시작하며 객체를 만들고자 했던 것 같습니다. 이런 실수로 인해 진정한 의미를 담은 객체를 온전히 만들어내지 못했던 점을 반성하게 됩니다. 협력 협력의 본질은 요청과 응답으로부터 시작합니다. 하나의 요청은 다른 요청을 발생시키고 그래프처럼 퍼져나가게 됩니다. 결국 네트워크가 구성되고 네트워크 안에서 협력은 필연적으로 존재합니다. 요청 속에는 해당 객체의 의무도 담겨 있습니다. 의무를 다해야 하지만 해당 객체로는 부족하기에 요청이 발생하게 되는 것입니다. 요청과 응답은 협력에 참..
추상화를 통한 복잡성 극복 초기 지하철 노선도는 실제 지형을 반영하여 구불구불한 노선과 불규칙한 역간의 거리를 사실적으로 표현하였다. 하지만 지하철 노선도에서 중요한 정보는 얼마나 사실적으로 지형을 묘사했는지가 아닌 출발지, 도착지, 최단경로, 환승 등과 같은 직관적인 정보이다. 이후 해리 백이라는 사람이 지하철 노선도의 핵심은 지도가 당연히 가져야 하는 정확성이 아닌 목적에 집중해야 함을 깨닫고 혁신적인 지하철 노선도를 개발하게 된다. 이는 지하철 노선도를 추상화한 것이다. 현실 세계는 매우 복잡하고 예측이 불가능하다. 따라서 이해하기 쉽고 예측할 수 있도록 분해하고 단순화하는 전략을 사용한다. 따라서 진정한 추상화란 불필요한 부분을 제거하며 사물의 본질을 드러나게 하는 것으로 시작한다. 불필요한 부분..