etc/책 리뷰

[책 ] 객체지향의 사실과 오해

hojak99 2019. 1. 24. 22:25

객체지향의 사실과 오해를 읽으며 작성한다.

객체지향이란?

책을 읽으며 처음 내가 자바를 배우면서 알게된 객체지향 에 대한 내용이 첫 챕터에 나온다.

책에서 실세계에 비유하여 설명을 해준다. 그래서 이해가 더 잘되며 기억에도 더 남는 것 같았다.

해당 책에서 객체지향의 개념에서도 얘기를 한다.

객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라고 객체를 이용해 시스템을 분할하는 방법

여기서 자율적인 객체 란 상태와 행위를 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.

또한, 이 책에서는 객체지향에 있어서 가장 중요한 것은 클래스 가 아니라고 한다. 물론, 클래스도 중요하지만 객체의 역할, 책임, 협력 에 집중하라고 한다. 즉, 어떤 객체들이 어떤 메세지를 주고 받으며 협력하는가가 객체지향에서 가장 중요하다고 한다.

그 동안 필자도 객체지향의 가장 중요한 것은 클래스와 메소드라고 생각했다. 하지만 객체지향이란 말 그대로 객체의 역할, 책임, 협력이 객체지향의 핵심이라는 것을 다시 한 번 느끼고 간다.


그럼 객체란 무엇일까, 이 책에서는 객체를 이상한 나라의 앨리스에서 나오는 앨리스에 비유를 하며 설명을 해준다.

객체란 식별 가능한 개체 또는 사물이다. 또한, 구별 가능한 식별자, 행동 및 변경 가능한 상태를 가진다.

그렇다면 상태란 무엇인가?

상태는 특정 시점에 객체가 가지고 이는 정보의 집합으로 객체의 구조적 특징을 표현함.

그렇다면 행동이란 무엇인가?

행동은 외부의 요청 또는 수신된 메세지에 응답하기 위해 동작하고 반응하는 활동. 그 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메세지를 전달할 수 있음.


여기서 캡슐화에 대해 처음 객체지향에 접한 사람들에게도 이해가 가기 쉽게 설명을 해줘서 좋은 것 같다. 이상한 나라의 엘리스로 예제를 드는데, 정의는 다음과 같다

캡슐화는 객체의 상태를 캡슐 안에 감쳐둔 채 외부로 노출하지 않는 것. 오로지 외부에 노출하는 것은 행동 뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동이다.

이렇게 캡슐화를 통해 결과적으로 객체의 자율성을 높일 수 있다 (스스로 판단하고 스스로 결정). 객체의 자율성이 높아질수록 협력에 참여하는 객체들은 서로 유연해지고 단순, 간결해진다.


이 책에서는 상태를 중심으로 객체를 바라보면 안된다고 한다. 객체에 필요한 상태가 무엇인지 결정하고 그 상태에 필요한 행동을 결정하면 안된다고 말한다. 필자도 이런 방식인 것 같다.

즉, 필자가 생각했을 때 책에서 한 말은 다음과 같은 것 같다.

예를 들어 푸시를 전송 기능을 개발한다고 했을 때 푸시라는 객체를 설계한다고 생각해보자. 그러면 푸시는 전송을 할 수 있어야 하고, 완료 됐는지 알 수 있어야 하며 중단할 수 있는 기능이 필요하다고 해보자. 이런 행동들이 필요하다고 한다면 푸시 전송을 했는지 하지 않았는지를 알 수 있는 상태 값이 필요하고, 중단이 된 푸시인지 아닌지 알 수 있는 상태가 필요할 것이다.

아마 이런 방식으로 행동을 먼저 정한 뒤에 거기에 필요한 상태 값을 결정하라는 뜻인 것 같다.


이 책에서 다시 객체지향에 대해 설명을 하면서 인용한 말이 있다.

의인화의 관점에서 소프트웨어를 생물로 생각하자. 모든 생물처럼 소프트웨어는 태어나고, 삶을 영위하고, 그리고 죽는다. [Wirfs-Brock 1990].

멋진 말인 것 같다.


추상화에 대해서도 이야기를 한다. 이 책을 읽어보니 내가 추상화하는 부분에 대해서 약한 것 같다.

추상화란 어떤 양상, 세부사항, 구조를 조금 더 명확하게 이해하기 위해 특정 저라나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법.

이 책에서는 추상화의 예를 지하철 노선도를 든다. 지하철 노선도에 해당 지역의 경사, 지하철 역간의 거리, 위치 등을 같이 표시했다. 하지만 이럴 수록 사람들은 노선도를 보기 더 힘들어한다.

일반적인 사람들은 지하철을 타는 목적이 A 역에서 C역으로 가는 것 일 것이다. A -> C 로 가기 위해 환승도 해야한다고 했을 때 추상화를 하지 않아 위의 이야기처럼 지역의 경사, 지하철 역간의 거리, 거리 사이 등을 표시하지만 추상화를 할 시 오로지 역간의 환승 정보만을 표시할 것이다. (현재 서울 지하철 노선도)

이렇게 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이다.


작성중

반응형