객체지향의 사실과 오해를 읽으며

김다혜·2020년 3월 1일
0

나는 실물로 된 책을 좋아한다. 또한, 책을 줄 긋고 낙서하면서 읽는 것을 좋아한다. 😊 최근에 드디어 완독에 성공한 '객체지향의 사실과 오해' (토끼책으로도 유명한!)를 읽으며 인상깊었던 내용을 기록해 두려고한다.

1월에 다 읽었는데, 드디어 포스팅을 하게 되었다는....😌

객체지향의 사실과 오해

✔️ 메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다는 점은 다른 프로그래밍 언어와 객체지향 프로그래밍 언어를 구분 짓는 핵심적인 특징 중 하나다.

✔️ 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아닌, 현실 세계를 기반으로 새로운 세계를 창조하는 것

✔️ 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.

✔️ 객체지향의 세계에서 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재이다. 앨리스 객체의 키를 작게 만드는 것이 앨리스 자신인 것처럼 음료 객체의 양을 줄이는 것은 음료 자신이다. (예제가 맘에 든다🤭)

✔️ 캡슐화는 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다. (자율적인 객체는 스스로 판단하고 스스로 결정하기 때문) 상태는 캡슐 안에 감춰둔 채 외부로 노출하지 않는다. (외부에 행동만을 제공하고 데이터는 행동 뒤로 감춰야 한다.)

✔️ 행동이 상태를 결정한다. 행동에 초첨을 맞춰라. 객체는 다른 객체와 협력하기 위해 존재한다.

✔️ 추상화의 목적은 복자성을 이해하기 쉬운 수준으로 단순화하는 것이라는 점을 기억하라.

✔️ 타입 시스템의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것이다.

✔️ 역할, 책임, 협력

✔️ 역할은 여러명으로 바뀔 수 있지만, 아무나로 바뀔 수 없다. (메시지를 이해하고 응답할 수 있는 객체에 한정)

✔️ 객체지향 시스템에서 가장 중요한 것은 충북히 자율적인 동시에 충분히 협력적인 객체를 창조하는 것이다.

✔️ 메시지를 먼저 결정하고, 수신할 객체를 찾아라

✔️ 묻지말고 시켜라. 객체는 다른 객체의 상태를 묻지 말아야 한다. (객체의 자율성 보장)

✔️ 자율적인 책임은 협력을 단순하게 만든다. ('~~어떠어떠하게 증언하라'가 아닌 '증언하라')

✔️ 자율적인 책임은 인터페이스와 구현을 명확하게 분리한다. (캡슐화)

✔️ 책임이 자율적일 경우 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않는다.

✔️ 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다. (설계가 유연해지며, 재사용성이 높아진다.)

책임이 자율적일수록 적절하게 추상화되며 응집도가 높아지고, 결합도가 낮아지며, 캡슐화가 증진되고, 인터페이스와 구현이 명확히 분리되며, 설계의 유연성재사용성이 향상된다.
객체지향의 강력함을 누리기 위한 출발점은 책임을 자율적으로 만드는 것이다. 그리고 그것은 선택하는 메시지에 따라 달라진다.

💁‍♀️ 소감

사실 이 책을 읽다가 중도에 포기(?)한 적이 두 번 정도 있다. 사실 그때에는 이 내용이 크게 와닿지 않았던 것 같다. 몇 개월이 지난 후에는 객체 설계에 대한 의구심이 많이 들었다. 이 때 당시에 어떻게 설계된 객체가 좋고, 효율적이고, 가독성 좋은 객체일까? 나는 과연 제대로 객체를 설계하고 있는가? 라는 의문을 많이 가졌다. (이 맘 때쯤, 스터디를 하는데, 스터디를 주도해주시는 분께서 강력 추천을 해주셨다 👍 읽어야되는 운명..?ㅎㅎ) 그래서인지 자연스럽게 이 책이 손에 잡혔고, 내용은 굉장히 와닿았고, 몇 개월 전의 나보다 많은 것을 깨달았고, 읽은 후의 나도 달라졌다고 스스로 생각된다.

이 책을 읽기 전의 나는 솔직히 말하자면, 객체를 객체답게, 객체지향적과는 거리가 멀었던 것 같다.😭 그리고 사실 지금도 100퍼센트 완벽하게 객체지향 설계를 한다고도 생각하진 않지만, 최소한 역할, 책임, 협력을 생각하며 코딩하려고 노력한다. (앞으로 더 나아질 것이라고 생각한다☺️)

이 책은 쉬운듯 어렵다.(앨리스 예시가 굉장히 재밌다!) 빠르게 읽힐 것 같지만, 빠르게 읽기엔 생각할 것이 많다. 그런 책이다😉

0개의 댓글