객체지향의 사실과 오해

지종권(JiJongKwon)·2023년 3월 30일

🎯 책 리뷰

출처 : https://wikibook.co.kr/object-orientation-ebook/ (위키북스)


📌 1장 협력하는 공동체

'역할, 책임, 협력'

이 장에서 중요하게 말하는 요소이다. 우리는 요청과 응답을 통해 협력을 한다.
그리고 협력하는 과정에서 역할을 부여받는다. 예를 들어 손님, 바리스타, 캐시어 등이 있다.

역할을 맡은 사람은 그 업무를 수행할 책임이 있다.

사람들은 특정한 목표를 이루기 위해 서로 협력한다. 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성한다.

역할은 유연하고 재사용 가능한 협려 관계를 국축하는 데 중요한 설계 요소이다.

훌륭한 객체지향 설계자가 되기 위해 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다.

1장에서는 객체, 역할, 책임, 협력등에 잘 설명해준다. 1장을 읽으며 오해했던 내용이 몇 가지가 있음을 깨닳았다. 특히 클래스의 구조와 메서드가 아니라 객체의 역할, 챔임, 협력에 집중하라 라는 말이 와 닿았다.

📌 2장 이상한 나라의 객체

2장은 이상한 나라의 엘리스를 예로 통해 객체의 행동에 따른 상태 변화를 설명해 주고 있다.

객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태, 행동, 식별자를 지닌 실체로 보는 것이 효과적이다.

상태는 현재를 기반으로 객체의 행동 방식을 이해할 수 있는 중요한 개념이다.

객체는 자기 자신의 상태를 책임진다 -> 외부의 객체가 직접적으로 객체의 상태를 변환시킬 수 없다.

객체의 행동은 상태를 바꾼다.
따라서 훌륭한 객체 지향을 하려면 상태가 아닌 행동에 초점을 맞춰야 한다.

📌 3장 타입과 추상화

추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복한 것

복잡성을 다루기 위한 추상화 차원

  1. 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것
  2. 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함

타입은 개념이다!

3장은 2장과 마찬가지로 객체의 행동에 좀 더 초점을 두며 이야기하고 있다. 객체의 행동으로 인해 분류 될 수 있으며, 일반화와 특수화 관계를 결정지을 수도 있다.

📌 4장 역할, 책임, 협력

객체지향 설계의 전체적인 품질을 결정하는 것은 협력의 품질이다.

협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다.

객체가 메시지를 받으면 그 메시지에 대한 작업을 수행 할 책임이 있다.

역할은 책임의 집합을 의미한다. 역할은 재사용 가능하고 유연한 객체지향 설계를 낳는 매우 중요한 구성요소이다.

역할, 책임, 협력의 관점에서 어플리케이션을 설계하는 유용한 세 가지 기법
1. 책임-주도 설계
2. 디자인 패턴
3. 테스트-주도 개발

📌 5장 책임과 메시지

적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 다순한 협력을 낳는다. 이때 자율성은 자기 스스로의 원칙에 따라 어떤 일을 하거나 자신을 통제해서 절제하는 성질이나 규칙을 말한다.

객체지향의 세계에서 객체들이 서로 협력하기 위한 유일한 수단은 메시지를 전송하는 것이다. 또한 객체는 어떤 메시지를 수신하고 처리할 수 있느냐가 객체의 책임을 결정한다.

📌 6장 객체 지도

6장은 구조를 바탕으로 시스템을 분할하는 객체지향의 또 다른 측면에 관해 설명한다.

안정적인 구조를 중심으로 기능을 종식시키는 접근법은 범용적이고 재사용 가능하며 변경에 유연하게 대처할 수 있는 모델을 만든다.

구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현한다.
기능은 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현한다.

6장 같은 경우 도메인을 기준으로 안정적인 도메인이 어떤점에서 장점이 있는지 예제를 통해 보여준다.

📌 7장 함께 모으기

7장 같은 경우 앞에서 배운것들을 좀 더 구체적으로 보여주고 있다.

앞에서 읽었던 내용을 기억하면서 보면 좋을 거 같다.


😄 느낀점

이 책을 읽으면서 내가 기존에 알고있던 객체지향과 차이점을 비교하면서 보았다. 내가 처음 자바를 배울 때, 클래스 생성, 객체 생성, 메서드 작성 방법등을 배웠다. 그래서 배울 당시에는 코드에 중요성, 클래스 만들고 메서드를 사용하는 방법에 대해 중심적으로 배웠던 거 같다. 그렇기에 클래스가 중요하다라는 점을 자연스럽게 받아들였다.

사실 자바를 쓰면서도 객체지향적인 언어라는 것은 알지만 객체지향이 의미와 특성 정도만 이해하면서 썼던 거 같다. 이 책을 읽고 나니 사실 코드도 중요하지만 더욱 중요한 것들이 있다는 것을 깨닳았다. 좀 더 객체지향으로 깊게 들어간 거 같았다.

내가 이 책을 읽으면서 느낀 객체지향의 특징은 역할, 책임, 협력이 중요하고 객체지향은 객체끼리 메시지를 주고 받으며 자율적인 자신만의 규칙으로 메시지를 받고 행동을 취하며, 행동을 통해 상태를 변화시킬 수 있다. 그리고 객체는 자율적인 존재이기 때문에 외부에서는 어떻게 그 동작이 진행되는지 자세히는 모르며, 메시지에 대한 결과 그 자체만 알 수 있다.

이 책은 객체지향이 무엇인지 쉽게 설명해 주고 이해가 잘 되서 좋게 읽었다.

0개의 댓글