이 글은 조영호 님의 저서 "오브젝트 Objects"를 읽고 정리한 글입니다.
🐳 책 <오브젝트> 를 읽게 된 계기
이 책을 읽게 된 계기는 단순했다. 회사에서 내가 구현하고 있는 부분을 어떻게 하면 더 개선할 수 있을까라는 고민의 해답을 얻기 위함이었다.
1일 1커밋, 자바스크립트 문법 등 공부는 매일 하지만 내가 알고 있는 것 이상으로 넘어가는 데 한계가 있었다.
그러던 중 다양한 매체에서 이 책을 소개하는 것을 보고 이 책에 대해 알게 되었다.
이 책이라면 어떤 것이 좋은 코드이고 어떤 것이 나쁜 코드인지 기준을 알려주지 않알까하는 기대감에 책을 사기로 했다.
그리고 오늘은 총 15개의 챕터 중 1챕터를 읽은 소감과 내용을 나누려고 한다.
우선 결론만 얘기하자면 일단 책이 너무 재밌다.
단순히 무엇이 좋은 코드이다가 아니라 우리가 흔히 작성할법한 좋지 못한 코드를 먼저 작성한 후에 그 코드들을 개선시켜 나가는 과정으로 1챕터가 진행되었다.
그러다 보니 단순히 나쁜 코드 좋은 코드로만 이해하는 것이 아니라 왜 나쁜 코드이고 왜 좋은 코드인지 알려주니 더 쉽게 이해다 됐다.
1챕터는 극장 티켓 시스템을 구현해 보면서 설명이 진행된다.
여기서 "아하!"했던 것들이 몇 가지 있었다.
🐳 아하! 모먼트
객체지향의 첫 걸음은 프로세스와 데이터를 하나의 덩어리로 모으는 것이다.
여기서 말하는 프로세스는 행위라고 이해하면 더 좋을 것 같다. 그리고 데이터는 그 행위의 대상 또는 주체를 데이터라고 생각하면 될 것 같다.
이러한 프로세스와 데이터를 한 모듈에 위치시키는 방식을 객체 지향 프로그래밍이라고 한다.
이것이 객체지향의 첫 걸음이다 !
객체의 속성 정하기
나는 항상 클래스를 만들 때 어떤 것을 속성으로 사용할지 궁금했다.
궁금증이 해소되지 않는 이유는 그것의 기준을 몰랐기 때문이다.
책 본문에서 TicketSeller는 자기가 일하는 TicketOffice에 대해서 "알아"야 한다고 설명하며 TicketSeller Class 안에 TicketOffice를 속성으로 가지게 했다.
여기서 알아야 한다는 단어가 나에게 그동안의 궁금즘의 답이 되었다.
그런데 알다 라는 단어를 한 번 생각해 보자.
"나는 안다". 이 문장은 완벽한가?
절대 아닐 것이다.
결국 "무엇을" 이라는 질문을 피할 수 없을 것이다.
이렇듯 객체의 속성도 다른 객체와의 관계 속에 있다는 것이 내가 이해한 내용이었다.
모든 것이 객체다 !
이 책에서 설명하고 있는 극장시스템을 예시로 생각해 보자.
관람객은 가방이 있고 가방 안에는 극장 예매권 또는 현금이 있다.
현실세계라고 생각한다면 능동적으로 행동할 수 있는 주체는 관람객일 것이다.
관람객은 가방에서 돈 또는 예매권을 꺼내서 사용할 것이다.
하지만 객체지행에서는 그렇지 않다 !
관람객은 가방에게 예매권 또는 돈을 달라고 요청한다.
이러한 요청은 추후에 배울 메세지로 생각할 수 있을 것이다.
그리고 가방은 예매권 또는 돈을 능동적으로 꺼내서 관람객에게 전달해 줄 것이다 !
이러한 설명을 듣는데 미녀와 야수가 생각났다.
야수의 집은 촛대, 주전자,그릇 등 모든 물건들이 자신의 자유의지로 움직인다.
객체지향도 마찬가지가 아닐까 ?
객체 지향에서는 현실세계와는 다르게 모든 것이 능동적으로 협력해야한다.
객체가 객체에게 요청하고 응답하는 것 그것이 요청과 책임이라고 생각할 수 있겠다 !
이러한 설명을 통해 객체간의 협력이 얼마나 중요한지 알 수 있었다.
좋은 객체지향적 코드란?
객체들이 능동적으로 협력하며
각각의 역할에 맡게 책임이 분산되어 있고
객체들 사이의 의존성을 적절하게 조절하는 것이다.
그리고 이런 행위를 하는 목표는 아래의 세 가지이다.
1. 제대로 동작하는 코드를 작성하기 위해
2. 변경이 용이한 코드를 작성하기 위해
3. 이해하기 쉬운 코드를 작성하기 위해
아직은 객체지향이란 무엇인가를 이해하는 첫 걸음이기에 글이 두서가 없고 설명하는 나의 입장에서도 머리 속에 개념들간의 연결고리가 끈끈하지는 않다.
하지만 15챕터 중 1챕터만 읽었는데도 벌써 "아하!" 하는 것들이 벌써 이렇게 많은데 앞으로의 14챕터들이 너무나 기대된다.
'독서' 카테고리의 다른 글
[오브젝트] 책임 주도 설계 적용기 (근태관리) (0) | 2024.03.20 |
---|---|
[오브젝트] 2. 캡슐화 (1) | 2023.11.19 |
[함께 자라기] - 자라기 (0) | 2023.09.27 |