객체지향의 사실과 오해에 관하여(객사오 북스터디) - Chapter.01 협력하는 객체들의 공동체

윤준석·2025년 4월 7일
0

스터디

목록 보기
2/5

I. 제목을 보고 든 생각

"객체지향의 사실과 오해"

처음 책 제목을 접했을 때에는 마치
잘못 알려진 정보를 바로잡는 특집 뉴스(팩트체크)와 같은 느낌의 책인가?
싶은 생각이 들었다.

내가 처음으로 객체지향 언어를 접한 것은 자바 언어를 공부하기 시작하면서였는데,
C언어를 배우고 난 뒤에 공부한 자바는 C와 비슷하면서도 다른 부분들이 아주 많았다.

자바를 공부하는 중에도, 객체지향의 명확한 개념에 대해서 무엇인지,
"객체지향이 뭔가요?" 라는 질문에 제대로 대답하기가 어려웠다.

아직 이해하기가 어려웠기 때문이었다.

이 책을 읽으면서 객체지향이란 무엇인지,
그 의의와 활용에 대해 조금씩 이해해가고 있는 것 같다고 생각한다.


II. Chapter.01 협력하는 객체들의 공동체

1장은 협력하는 객체들의 공동체 라는 주제로 이야기가 시작된다.

객체지향 패러다임의 핵심이 자율적인 객체들간의 협력이라는 점을 강조하며 이야기가 전개되는데,

우리가 객체지향에 대해 설명할 때에는 객체지향 세계는 현실세계와도 비슷한 특성을 가진다고 보통 설명한다. (또는 현실세계와 같다고 설명한다.)

객체지향을 실세계의 모방 이라는 개념으로 철학적으로 설명할 수는 있지만,
실용적인 관점에서는 객체지향을 설명하는데에는 적합하지 않다고 저자는 말한다.

그 이유는 어플리케이션을 개발하는 과정 속에서는 객체에 직접적으로 대응되는 사물을 발견할 확률이 그다지 높지 않기 때문이고, 발견하더라도 객체와 사물간의 개념적 거리는 괴리가 있다 라고 이야기 한다.

--
나는 이러한 저자의 의견에 공감했다. 여러 강의나 블로그에서 객체지향에 대해 서술한 설명을 보면
항상 현실의 예시를 들어 설명하곤 한다. 이러한 예시는 듣는 사람의 이해를 돕기 위해서라고
"잠시 사용하는 개념" 이라고 생각하는게 좋겠다.

객체지향을 이해하기 위해 꼭 현실을 예로 들어야 하는 건 아니다.
오히려 객체지향은 역할, 책임, 협력이라는 세 가지 키워드를 중심으로 바라보는게 더 명확하다.
객체는 단순한 데이터의 집합이 아니라, 자신만의 책임을 가지고 동작하며,
다른 객체와의 협력을 통해 하나의 시스템을 만들어낸다.

즉, 객체지향 설계에서 중요한 것은 "이 객체가 무엇인가?" 보다는
"이 객체가 무엇을 해야하며, 누구와 어떻게 협력할 것인가?"를 고민하는게 좋을 것 같다.

해서 객체지향을 한 줄로 정리하면 아래와 같다.

"역할과 책임을 가진 객체들이 서로 협력하여 문제를 해결하는 프로그래밍 방식"


아래는 내용 중 재치있게 비유를 들어 설명한 부분이 있어서 소개해본다.

커피 공화국의 아침

샐러리맨의 커피 주문을 하나의 에피소드로 예시를 들어
손님, 캐셔, 바리스타의 역할로 나누어 설명하고,
역할은 책임을 가진다는 말과 함께 이들은 협력한다는 이야기를 강조한다.

요청과 응답으로 구성된 협력은 역할과 책임에 대해서 설명하기에 충분한 예시인 것 같다.
특정한 역할은 특정한 책임을 암시한다. 협력에 참여하며 특정한 역할을 수행하는 사람들은 역할에 적합한 책임을 수행한다고 설명하며,

아래 4 가지의 특징을 제시한다.

  • 여러 객체가 동일한 역할을 수행할 수 있다.
  • 역할은 대체 가능성을 의미한다.
  • 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
  • 하나의 객체가 동시에 여러 역할을 수행할 수 있다.

결론적으로.

이 책의 주제를 관통하는 내용이자, 이 책을 통해 얻어야 할 내용을 인용해보았다.

훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은
코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 
사고의 중심을 전환하는 것이다. 
중요한 것은 어떤 클래스가 필요한가가 아니라 
어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다. 

클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과하다.

위 내용처럼 객체를 중심으로 코드를 설계하는 사고를 기르는 연습을 해보아야겠다고 생각하게되는 챕터였다.

profile
컴퓨터 공학을 공부중인 윤준석 입니다!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN