한줄평
추상적인 객체지향의 개념을 구현하기 위한 책
책을 읽게 된 계기
지인 추천으로 읽게 되었습니다.
작가 소개
조영호
객체지향 설계와 도메인-주도 설계에 관심이 많으며 행복한 팀과 깔끔한 코드가 훌륭한 소프트웨어를 낳는다는 믿음을 증명하기 위해 노력하고 있다. LG-CNS, 네이버, 쿠팡을 거치며 개발이라는 창조적인 작업의 즐거움을 만끽했으며, NHN NEXT에서 후배들을 양성하며 지식을 공유하는 즐거움을 누리기도 했다. 현재는 다음카카오에서 사용자에게 가치를 제공할 수 있는 다양한 서비스 개발에 참여하고 있다. 소프트웨어 개발과 관련된 경험과 정보를 공유하기 위해 ‘이터너티(Eternity)’라는 필명으로 블로그(http://aeternum.egloos.com/)를 운영하고 있다.
핵심요약
저자는 객체지향의 특성을 다양한 측면에서 바라보면서 본질이 무엇인지 계속 고민해나갑니다. 그리고 이러한 과정에서 잘못 알려진 개념과 지식들을 바로잡습니다.
- 객체와 타입은 다르며, 객체를 심볼, 외연, 내연으로 분류한 것이 타입이다. 타입은 개념과 동의어이다.
- 또한, 클래스와 타입은 다르며, 클래스는 타입을 구현하기 위한 수단일 뿐이다. 또한, 클래스는 코드를 재사용할 때에도 사용되기 때문에 타입이라고 할 수 없다.
- 역할, 책임, 협력을 통해 여러 객체가 상호작용하여 시스템을 구성한다. 이러한 객체의 상호작용은 ‘메시지’를 통해서만 전달되며, 이러한 메시지는 공용 인터페이스로 표현된다.
- 책임은 ‘자율적’으로 구성되어야 하며, 이는 다른 객체에게 너무 많은 메시지를 통해 행동을 제약하지 않아야 한다는 것이다.
- 프로그램을 설계하는 과정에서 객체를 먼저 고민하지 말고, 어떤 메시지를 주고받을지를 먼저 고민하면 훨씬 안정된 구조를 만들 수 있다.
- 지도 하나를 통해 다양한 길을 찾을 수 있는 것처럼, 도메인 모델을 만들면 다양한 문제를 해결할 수 있다.
인상깊은 구절
- 재귀적으로 컴퓨터를 객체라고 불리는 더 작은 컴퓨터로 분할1
위 구절이 객체지향 프로그래밍에서의 객체를 가장 본질적으로 나타냈다는 생각이 들어 인상깊었습니다. 서버2와 시스템, 심지어 JVM도 컴퓨터 내에서 동작하는 객체이면서 작은 컴퓨터라는 생각이 들었습니다. 결국 이러한 객체들은 작은 컴퓨터처럼 저장공간(객체 - 속성 / 컴퓨터 - 메모리)에 있는 데이터를 통해 특정 연산(객체 - 메서드 / 컴퓨터 - CPU)을 수행합니다.
평가
- 추상적인 개념을 다양한 방향에서 접근할 수 있어 좋았습니다. 장님이 코끼리를 보려면 다양한 각도에서 직접 만져봐야 하는 것처럼, 추상적인 개념을 알기 위해서는 다양한 방향에서 확인하는 것이 효과적인 것 같습니다.
- 중간에 ‘이상한 나라의 앨리스’의 상황이나, 실제 커피 주문 시스템의 설계 과정을 통해 더욱 쉽게 이해할 수 있었습니다.
- 다만, 객체지향을 처음 접하는 분이라면 추상적인 이야기가 많아 조금 이해하기 어려울 수 있을 것 같습니다.
느낀점
- 어렴풋이 언어적 느낌으로만 알던 추상적인 지식이 책의 설명으로 구체화된 것 같습니다.
- 나중에 좀더 객체지향에 대해 깊이 이해하고 다시 읽으면 또 다른 느낌일 것 같아 주기적으로 읽어보려고 합니다.
- 객체지향을 잘하는 개발자들은 비유를 참 잘 드는 것 같습니다.
추천
- 객체지향의 개념이 헷갈리거나, 어느 정도의 경험은 있지만 이론적인 지식이 필요한 분들이 읽으면 좋을 것 같습니다.
- 저처럼 초보 개발자들이 어떻게 공부해가야 할지 감을 잡을 수 있도록 쉬운 예시와 다양한 레퍼런스 서적들이 제시되고 있어, 초보 개발자들에게 더욱 추천합니다.
References
URL | 게시일자 | 방문일자 | 작성자 |
---|---|---|---|
https://www.kyobobook.co.kr/service/profile/information?chrcCode=1001590703 | 미확인 | 240710 | 교보문고 |