객체지향 프로그래밍의 핵심은 줄곧 의식해왔던
클래스
가 아닌객체
이며 객체의역할
,책임
,협력
을 통해 설명할 수 있다.
우아한 형제들에서 진행하는 교육 프로그램 우테코
에서 광탈하고... 공부가 더 필요하겠다고 느낀 찰나 친절히도 우테코 측에서 내게 학습 로드맵
이라며 추천 도서 리스트를 메일로 보내왔다. 솔직히 다 읽어볼 자신은 없고 나에게 가장 필요하다고 느끼는 책을 딱 5권
만 골라서 읽어보고 리뷰해보고자 한다. 그래서 결론은
정도 되겠다. 독후감 보다는 메모장
으로 생각해줬으면 한다.
카페에서 음료를 주문한다는 상황을 가정해보자. 손님, 바리스타 등의 사람을 객체
로, 음료의 주문을 메세지
로, 요청을 처리하는 것(주문전달, 음료제조 등)을 메소드
로 해석했을 때 이를 객체지향
이라 할 수 있겠다.
주제가 객체지향
인 만큼 객체
를 중심으로 생각했을 때 객체와 객체는 저마다의 역할
을 수행하기 위해 존재하며 메세지
를 통해 request
와 response
를 주고받는다. 역할을 부여받은 객체들은 각각 기능을 수행할 책임
이 있고 이 과정에서 협력
이 발생하게 된다.
현대사회에서 혼자서 모든 일을 수행하는것은 불가능에 가깝다. 문제를 해결하고자 한다면 해당 문제 해결에 도움이 되는 객체
에게 요청(request)
를 하게 되며 요청받은 객체
는 역할을 수행한 후 요청 주체에게 응답(response)
하게 된다.
역할을 기준으로 객체를 분리한다면 아마 다음과 같을것이다.
요청
하고 주문한 음료를 수령
하는 역할요청
을 바리스타에게 전달하고 바리스타의 응답
을 손님에게 전달하는 역할요청
에 의해 음료를 제조
하고 카운터에게 응답
하는 역할주어진 역할을 수행하는 것을 본인의 책임
으로 볼 수 있기에 명확한 역할을 구분하는 것이 중요하며 이를 위해선 다음과 같은 역할/책임의 특성을 고려할 필요가 있다.
하나의 객체
가 2개 이상
의 역할을 수행할 수 있다.
- 규모가 작은 동네 카페의 경우 카운터가 바리스타의 역할을 동시에 수행해도 문제없다.
반대로 여러 객체
가 하나의 역할
을 수행할 수 있다.
- 능률 향상을 위해 2명 이상의 바리스타를 고용해도 된다.
역할은 대체 가능성
을 내포하고 있다.
- 손님 입장에선 바리스타가 누구인지는 전혀 상관없다. 문제가 발생할 경우 해당 바리스타를 해고하고 새로운 바리스타를 고용하면 그만이다.
객체는 스스로 책임을 수행할 방법을 정할 수 있다.
- 모든 카페의 바리스타는 손님에게 음료를 제공한다는 동일한 책임
을 부여받지만 각 프렌차이즈 별로 다른 원두, 장비, 로스팅 방법 등을 사용한다. 이를 다형성(polymorphism)
라고한다.
당장 떠오르는 클래스
, 메소드
따위에 매몰되지 말고 객체의 역할
, 책임
, 협력에
집중해야 한다. 결국 객체지향이란 상호작용하는 자율적인 객체
들의 공동체를 통해 시스템을 분할
하는 방법이다.
참고문서