◈ 서론
김영한 선생님의 인프런 강의를 열심히 듣던 중,
객체지향 설계를 이해하는 데에 있어서 이 책이 큰 도움을 줄 수 있다는 말에 망설임 없이 이 책을 구매했다.
스스로 코딩을 할 때 이미 잘 설계되어 있는 구조를 가져와서 내 입맛대로 고치는 과정은 잘 해냈지만,
그런 구조를 직접 설계하게 되면 상당히 난감했기에 객체지향 설계에 대해 이론적으로 더 깊이 이해하고 싶었고,
그런 마음이 나를 이 책으로 이끌었다.
◈ 소감
이 책은 객체지향을 여러가지 이야깃거리와 함께 설명해준다는 목적을 가진 매력적인 책이다.
특히, 커피전문점과 이상한 나라의 앨리스, 지하철 노선도, 지도 안에 숨겨져 있는
객체지향 요소를 파헤쳐보는 과정이 흥미롭지 않을 수가 없었다.
그동안 이해가 되건 안되건 주먹구구식으로 코드들이 작동하는 방식들을
이해해야 했던 기억들과는 확실히 사뭇 다른 경험이었다.
저자는 독자가 IT 지식에 대해서 무작정 공부하는 느낌보다는
챕터의 흐름에 따라 이야깃거리들을 읽어나가듯이
객체지향의 원리들에 대해서 자연스럽게 이해하기를 바랐던 것 같다.
뿐만 아니라, 외국의 수많은 객체지향 관련 문헌을 참조해서
이론적인 부분들을 계속해서 보충해주는 책이다.
하지만 그럼에도 불구하고 아쉬운 부분들이 있었다.
IT 업계로의 취업을 꿈꾸고 있는 내 입장에서는 혹시라도 놓치는 부분이 있을까 조심하면서 읽게 되었고,
이 과정에서 이야깃거리나 예시에 대해서 반복해서 설명하는 구간이 있으면 쉽게 피로해졌다.
독자가 이해했으면 하는 마음은 십분 이해하지만 내용이 반복되는 느낌이 있어서
'이 부분은 조금만 더 콤팩트했으면 좋겠다' 싶은 부분들도 있었다.
그리고 내가 아직 초보 개발자이니 만큼,
어떤 부분은 '차라리 코드로 이해하고 싶은데?' 하는 생각도 들었다.
이야기로 풀어낸 객체지향은 확실히 매력적인 아이템이지만 솔직히 말하자면
내용들이 온전히 내 것으로 다가오지 않았고, 어떻게 코드로 구현할 것인지 막막하다는 생각이 들었다.
그러나 이 책의 서론에서도 명시하고 있듯이, 이 책은 객체지향에 대한 이해를 돕는 책이지,
객체지향 프로그래밍에 대한 지식을 전달하는 것이 아니며,
이 책 한 권을 읽었다고 해서 갑자기 내 코딩 실력이 일취월장할 수는 없다.
이 책은 객체지향을 바라보는 시야를 넓혀주는 책이다.
따라서 추후에 객체지향 개발방식을 더 깊이 경험해 본 다음에 이 책을 다시 읽어보면 좋을 것 같다.
◈ 저장하고 싶은 문구들
세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는
복잡성을 극복하기 위한 인간의 작은 몸부림이다.
인간은 좀 더 단순한 객체들로 주변을 분해함으로써 자신이 몸담고 있는 세상을 이해하려고 노력한다.
즉, 객체란
인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다.
- 41p.
객체는 무생물이거나 심지어는 실세계의 개념적인 개체로 모델링될 수도 있지만,
그것들은 마치 우리가 현실 세계에서 에이전트로 행동하는 것처럼
시스템 안에서 에이전트처럼 행동한다.
객체가 현실 세계의 대상보다 더 많이 안다는 것이 모순처럼 보일 수도 있다.
결국, 인간이라는 에이전트 없이 현실의 전화는 서로에게 전화를 걸지 않으며
색은 스스로 칠하지 않는다.
일상적인 체계에서는 어떤 사건이 일어나기 위해 반드시 인간 에이전트가 필요한 반면
객체들은 그들 자신의 체계 안에서 [능동적이고 자율적인] 에이전트다.
의인화(anthropomorphism)의 관점에서 소프트웨어를 생물로 생각하자.
모든 생물처럼 소프트웨어는 태어나고, 삶을 영위하고, 그리고 죽는다.
- 레베카 워프스브록, 1990
- 68p.
의도는 "메시징"이다.
훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은
모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려 있다.
- 앨런 케이, 1998
- 138p.
객체지향의 기본 개념은
책임을 수행하는 자율적인 객체들의 협력을 통해 애플리케이션을 구축하는 것이다.
객체지향의 세계에서 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 방법은
메시지를 전송하는 것이다.
다른 객체와 협력할 필요가 있는 객체는 메시지를 전송하고,
메시지를 수신한 객체는 미리 정의된 방법에 따라 수신된 메시지를 처리한다.
메시지를 수신한 객체 역시 메서드를 실행하는 중에
다른 객체의 도움이 필요하다고 판단되면 적합한 객체에게 메시지를 전송한다.
객체지향 애플리케이션의 중심 사상은 연쇄적으로 메시지를 전송하고 수신하는
객체들 사이의 협력 관계를 기반으로 사용자에게 유용한 기능을 제공하는 것이다.
- 154p.
설계가 어려운 이유는 어제 약속했던 기능을 제공하는 동시에
내일 변경될지도 모르는 요구사항도 수용할 수 있는 코드를 창조해야 하기 때문이다.
요구사항을 만족시킬 수 있는 다양한 설계안들을 저울질하면서
그 결과로 단순하면서도 유연한 설계를 창조하는 것은 공학이라기보다는 예술에 가깝다.
- 182p.
/* 요즘에는 개발 공부에 시간을 쏟기 때문에 책을 많이 읽지는 못하지만
평소 책 읽는 것을 좋아하기 때문에 Book 카테고리를 만들어봤다.
IT 관련 서적이 아닌 다른 책들도 자유롭게 다뤄보고 싶다. */
/* 개발자들이 티스토리를 사용하는 이유가 마크다운 기법 때문이라는 말이 있다.
나는 아직 티스토리 에디터를 사용하고 있고, 개발 지식을 더 습득하는 게 우선이라는 핑계 하에(...)
마크다운 기법에 대해서 자세히 알아보고 있지는 않지만 언젠가 꼭 배워서 적용해 볼 예정이다. */
'Book > Hard Skill' 카테고리의 다른 글
공봉식 - 『Tucker의 Go 언어 프로그래밍』 (1) | 2023.10.07 |
---|---|
김원일, 서종호 - 『따라하며 배우는 AWS 네트워크 입문』 (0) | 2023.06.10 |
전예홍 - 『Do it! 타입스크립트 프로그래밍』 (4) | 2022.10.14 |
유키 히로시 - 『만화로 배우는 리눅스 시스템 관리』 (0) | 2022.05.18 |
조훈 · 심근우 · 문성주 - 『컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커』 (0) | 2022.04.23 |