오늘 소개해드릴 책은 조영호 저자님의 "객체지향의 사실과 오해" 라는 책입니다.
클래스가 아닌 객체를 지향한다는 것은 무슨 의미일까? 둘이 비슷한게 아닌가?
"커피 공화국의 아침" 이라는 주제로 이 책의 이야기는 시작이 됩니다.
어느 회사의 아침
지친몸을 이끌고 회사에 출근한 직장인들을 조금이나마 위로해주는 카페테리아의 이야기로 커피 주문을 하는 손님과 계산을 도와주는 캐셔, 마지막으로 캐셔가 손님으로 받은 주문을 전달받아 커피를 제조하는
바리스타까지의 일상생활에서 발생하는 사람간의 협업을 객체 세상의 관점으로 해석합니다.
여기서 객체인 손님, 캐셔, 바리스타는 모두 각각의 역할을 가지고 본인에게 할당된 역할을 바탕으로 책임을 수행하며
각각의 객체들과 협력하게 됩니다. (여기서 책임이라고 하는건, 캐셔의 경우 손님에게 받은 주문을 바리스타에게 전달해야할 책임이 있고 바리스타는 전달받은 주문에 따라 커피를 제조할 책임이 있습니다.)
여기서 객체지향이 가지는 강점이 그대로 드러나게 됩니다.
객체지향 패러다임은 이렇듯, Real World에서의 문제 해결을 위한 요소들을 객체화(상태와 프로시저를 동시에 가지는) 하여 요구사항의 단계에서부터 응용 어플리케이션의 완성 단계까지 그 개념을 쭉 가지고 프로세스를 진행할 수 있습니다. 따라서 개발의 절차에 따라 현실세계와 프로그래밍적 구현의 간극을 최소화 시켜 혼동을 줄일 수 있습니다.
이런 객체지향 패러다임을 지원하는 언어(자바, C# 등)는 객체지향적인 특성을 극대화 하기 위해 추상화, 다형성, 상속 그리고 클래스 등의 여러가지 장치를 제공하고 있습니다.
하지만 여기서 문제가 발생합니다.
객체지향 언어가 이런 객체지향 패러다임의 특성을 반영하기 위해 제공하는 장치에 너무 과몰입이 된다는 것입니다.
응용프로그램을 개발할 때 저를 포함한 많은 개발자들이 "어떤 클래스가 필요하지?" 를 먼저 떠올리고는 합니다. 그래서 필요할것 같은 클래스를 몇 가지 뽑아서 UML에 그려놓고 클래스간의 관계를 설정하면 기초 설계가 마무리 되었다고 생각할 수 있습니다.
"결코 틀린게 아닙니다."
다만, 집중해야할 부분이 조금 다르다고 이 책에서 제시합니다.
개발자들이 집중해야할 부분은 클래스를 먼저 뽑아내는게 아닌, "어떤 역할을 수행하는 객체가 필요할까?" 라는 포인트에 집중해야한다고 말합니다.
객체 자체는 매우 Dynamic합니다. 앞에서의 커피공화국의 이야기처럼 시끌벅적한 카페테리아 안에서 분주하게 손님들과 상호작용하며 주문을 받고, 결제를 하고 커피를 제조하는 캐셔와 바리스타 객체처럼 역할과 책임에 따라 서로 협력하는 객체들을 도출하는 프로세스가 필요하다 말합니다. Class는 단지 이런 객체들을 만들어내는 Static한 Frame일 뿐입니다.
따라서 우리는 단순히 클래스들의 관계가 아닌, 동적인 객체들의 관점으로 Domain을 해석하는 통찰을 길러야 합니다.
그러면... 어떻게 해야하는데?
커피공화국 이후로 "이상한 객체나라의 엘리스" 라는 주제로 객체에 대한 조금 더 자세한 이야기가 펼쳐집니다.
OOP를 잘 모르는 혹은 능숙하지 않은 사람이라도 해당 책을 보면서 객체를 지향하는게 어떤 것인지 알 수 있다는게 이 책의 장점입니다. 실제로 책 대부분의 내용에서 코드가 등장하지 않습니다.
책에서 매우매우 강조하는 객체의 역할과 책임 그리고 협력 이라는 주제로 책 전반에 걸쳐 은은하게 설명을 하며, 단순히 개념적으로만 알고 있었던 상속, 캡슐화 등의 요소들이 왜 필요하고 어떻게 이용하는지 좋은 범례들을 보여줍니다.
OOP에 관심이 있는 분이시라면, 좋은 디자인을 지향하는 개발자이시라면 한번 쯤 읽어보시길 추천드립니다.
'Pluto의 책방' 카테고리의 다른 글
[Pluto의 책방] 임상시험의 배경과 LifeCycle (Part 2) (0) | 2024.07.21 |
---|---|
[Pluto의 책방] 임상시험의 배경과 LifeCycle (Part 1) (0) | 2024.06.19 |
[플루토의 책방] "합리적인 숙제를 내는 선생님이 되어라." 대용량 데이터베이스 솔루션 - 이화식 저자 (0) | 2023.01.30 |
[플루토의 책방] "코드로 이해하는 객체지향 설계" Object (조영호 저자 / 위키북스) (0) | 2021.11.22 |