일기

<객체지향의 사실과 오해> 를 읽었다

토기발 2022. 11. 10. 02:11

출처: yes24

 

<객체지향의 사실과 오해: 역할, 책임, 협력 관점에서 본 객체지향>

IT도서들 중에서 꽤 많은 추천을 받았던 책이어서 눈여겨보고 있다가 기회가 되어 읽어보았다.

 

객체지향이 무엇인가? 

면접을 가면 자주 나오는 단골 질문이다. 

이 블로그에서도 몇 번 정리한 적이 있었는데, 현실에 있는 것 중 프로그램에 필요한 데이터를 상태와 행위를 가진 객체로 추상화한 뒤, 객체들 간의 상호작용을 통해 프로그램으로 만드는 것이라고 했던 것 같다.

또, 객체지향을 설명하기 위해 다형성, 상속, 캡슐화, 추상화에 대해서 설명하고...  붕어빵, 자동차, 동물 등의 예를 들곤 했다.

그런데 이 책에서는 객체지향의 목표는 현실 세계를 모방하는 것이 아니라 고객을 만족시키는 신세계를 창조하는 것이라고 한다.

왜 모방이 아닐까? 그것은 프로그래밍과 현실이 다르기 때문이다.

현실에서는 사람이 커피를 마실 뿐이지만, 프로그래밍에서는 사람도 커피도 객체이기에 사람이 커피에게 마시겠다는 메시지를 보낼 뿐이고 커피가 자율적으로 양이 줄어드는 것이다.

이 송수신을 할 때, 책의 부제목처럼 모든 객체는 역할이 있고, 역할에 따른 책임이 있으며, 객체간 상호 협력이 필요하다.

이렇게 메시지를 송수신하며 상호작용하는 것을 객체지향이라고 한다.

 

 저자는 행동이 상태를 결정한다고 한다.

초보자가 하는 실수로 책에 언급된 것은 나도 하는 실수인데, 먼저 객체를 만들 때 객체의 상태부터 정의하는 것이다. 

자동차 객체를 만든다고 할 때 먼저 DTO에 자동차의 넘버, 이름, 색, 가격 등등을 먼저 적어놓고 나서 시작해 버린다.

하지만 객체를 이용하는 이유는 객체가 다른 객체가 필요로 하는 행위를 제공하기 때문이다. 그렇기에 행동(메시지) 먼저 정한 후 거기에 필요한 상태와 속성을 부여하는 것이 맞는 순서라는 것이다.

 

 더불어 인터페이스에 대해서도 앨리스 이야기의 비유를 들어 설명해 준다.

인터페이스란 객체가 책임을 수행하기 위해 외부로부터 메시지를 받기 위한 통로이다.

지나치게 상세한 메시지는 객체의 자율성을 저해한다. 하지만 조금 추상적인 메시지를 수신할 수 있는 인터페이스를 제공하면 수신자의 자율성을 보장할 수 있다. 

또한 인터페이스는 최소로 해야 하고, 객체의 공용 인터페이스와 구현(객체의 내부 구조 및 작동방식)을 명확히 분리(송수신자가 구현부분이 아닌 인터페이스에 대해서만 결합할 수 있게 하는 것=캡슐화)하라고 한다. 그러면 객체 내부를 수정하더라도 외부에 미치는 영향을 최소화할 수 있다.

 

이러한 내용 외에도 유스케이스 다이어그램,  UML다이어그램, 디자인패턴, 추상화 등의 설명이 이어진다.

이 책을 읽고 단순하게 알고 있던 용어들의 개념을 비유와 역할, 책임, 행동이라는 관점 안에서 친절하게 설명해서 더욱 이해가 잘 되었다. 더불어 나도 객체지향을 클래스를 중심으로 생각했는데(동물 클래스에 고양이 객체가...), 객체의 자율성을 중심으로 객체지향의 이모저모를 설명하는 책 내용을 읽으며 객체지향에 대해 더욱 가까워진 기분이 든다. 

약간 아쉬운 점은 다른 리뷰에서도 짚었던 부분인데, 어떠한 개념을 설명할 때 코드로 구현한 것도 함께 있으면 좋지 않았을까 하는 점이다. 책의 거의 마지막에 전체적인 구현을 코드로 보여주는 것 말고는 내내 글로만 설명되어 있어서 코드 구현은 따로 찾아봐야 한다.

같은 저자의 <오브젝트 : 코드로 이해하는 객체지향 설계>가 이런 아쉬움을 풀어줄 책이 될지도 모르겠다. 

언제 한번 읽어보는 걸로...! 

 

 

 

 

 

'일기' 카테고리의 다른 글

인텔리제이 cannot resolve symbol 'String' 오류  (0) 2022.12.24
JAVA의 정석(기본편)  (0) 2022.10.29
0904 일기  (0) 2022.09.04
wsl2 vmmem 메모리 누수 해결  (0) 2022.08.15
0815 일기  (0) 2022.08.15