본문 바로가기

책/객체지향의 사실과 오해 (완)

01 협력하는 객체들의 공동체

시너지를 생각하라. 전체는 부분의 합보다 크다.

우아한 테크 코스에 떨어지고 객체지향이라는 패러다임을 제대로 공부하고자 기록합니다.

01장에서는 객체지향프로그래밍이라는 개념을 짚고 넘어가는 장이였다고 생각합니다.

목차에는 다음과 같이 이루어져 있습니다.

이 중에서 제가 인상깊게 읽은 부분은 아래와 같습니다.

역할과 책임, 협력 관점에서 본 객체지향

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

책에서 제시한 내용은 대체로 그동안 무의식적으로 사용하고 있던 추상화, 다형성, 캡슐화의 의미를 풀어서 설명했다고 생각합니다. 그렇기에 그동안 한마디로 사용하고 있었지만 깔끔하게 한마디로 설명할 수 없었던 개념들에 대해 깔끔하게 정리할 수 있었습니다.

협력속에 사는 객체

  1. 객체는 충분히 "협력적"이어야 한다.
  2. 객체는 충분히 "자율적"이어야 한다.

이는 책에서 주장하는 객체가 지향해야하는 방향이라고 생각합니다. 책에서 "협력"하지 않는 객체를 전지전능한 객체(god object)라고 칭하며 복잡도로 인해 결국 자멸한다고 주장합니다. 이것을 다시 이야기하면 객체는 복잡도가 낮아야 하고 이를 위해서는 역할이 분명해야한다고 생각합니다. 또한 자율적이라는 말은 외부에 의해 객체가 조작되는 것이 아닌 스스로 행동해야한다는 말로 정리할수 있습니다.

상태와 행동을 함께 지닌 자율적인 객체

흔히, 객체를 상태(state)와 행동(behavior)을 함께 지닌 실체라고 정의한다.

이는 절차지향프로그래밍과 객체지향프로그래밍을 나누는 큰 기준중 하나라고 생각합니다. 그리고 이를 준수하기 위한 지표중 하나는 캡슐화라고 생각합니다. 캡슐화를 통해 객체는 자신의 상태를 감추고 행동만을 외부에 선택적으로 노출시켜 결과적으로 외부에 로직을 수행하는 는 방법을 노출하는 것(how)이 아닌 무엇을 하는지(what)만을 외부에 제공할수 있게 됩니다.

객체지향의 본질

  • 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
  • 자율적인 객체란 상태행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
  • 객체는 다른 객체와 협럭하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.

위에서 이미 언급을 여러번했지만 그만큼 중요하다고 생각하여 다시 짚고 넘어가기 위해 글쓴이가 다시 정리해서 목록화했다고 생각합니다.

마지막으로 그동안 "객체지향 프로그래밍 == 클래스로 이것저것하는 프로그래밍" 이라고 생각하였던 저에게 다른 시각으로 바라볼수 있게끔 도와준 문구를 작성하며 글을 마치겠습니다.

클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라, 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.

' > 객체지향의 사실과 오해 (완)' 카테고리의 다른 글

06 객체지도  (0) 2024.03.15
05 책임과 메시지  (1) 2024.01.23
04 역할, 책임, 협력  (2) 2024.01.23
03 타입과 추상화  (0) 2024.01.10
02 이상한 나라의 객체  (0) 2024.01.07