객체지향의 사실과 오해 | 1장. 협력하는 객체들의 공동체

Youngboy_Engineer·2021년 9월 21일
0

독서(reading)

목록 보기
1/1

최근 프로그래밍을 공부하면서 단순히 '코딩'을 잘하는 것이 중요한 것이 아니라는 사실을 많이 느끼고 있다.
컴퓨터 구조, 운영체제, 자료구조와 알고리즘 같이 Computer Science에 대한 기본적인 지식이 기반이 되면서 동시에 코드를 잘 짜는, 프로그래밍을 잘하는 사람이 회사에 필요한 인재이며 소위 말하는 몸값 높은 개발자가 될 수 있는 길이라고 생각한다.
주말마다 CS 스터디를 하고, 원서 읽기 스터디를 하고 있지만 별개로 어떤 책을 읽으면 개발자로써 한걸을 더 나아갈 수 있을까 고민하던 차에 싸피에서 같이 공부하는 상필이가 이 책을 추천해주었다.
책을 한 번 읽어보자!


앞으로 책의 챕터별로 내용과 내 생각을 정리하고자 한다. 모든 내용은 객체지향의 사실과 오해 책에서 발췌한 것이며 저자 조영호 님에게 저작권이 있음을 밝힌다. 이제 겨우 1장 읽었지만 나같은 비전공자 개발 초짜가 읽으면서 이해하기 쉽게 잘 쓰신 것 같다. 😁

목차

1장. 협력하는 객체들의 공동체

  1. 협력하는 사람들
  2. 역할, 책임, 협력
  3. 협력 속에 사는 객체
  4. 객체지향의 본질

객체 지향의 핵심은 협력, 역할, 책임 이다.

협력하는 사람들

대부분의 사람들은 "객체지향이란, 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임" 이라고 한다 (나도 이렇게 배운 것 같다).
즉 객체 지향이란, 현실세계에 존재하는 사물에 대한 추상화. 라는 것이 대부분 사람들이 객체 지향을 정리하는 한 문장이다. 사실 나도 이 얘기를 들으면서, 이게 뭔소리인지 의아했었다.
물론 위 문장이 틀린 말은 아니다. 객체 지향이라는 개념을 이해하기 위해서는 실세계를 비유로 들고, 실세계를 모방으로 한다는 말 자체가 효과적이라고 한다.

저자는 실세계의 예시를 통해 객체지향을 설명한다.

이른 아침 출근해서 사내 카페에서 커피를 주문하는 사람과 주문을 받는 캐셔 그리고 커피를 제조하는 바리스타 예시를 통해서 객체지향의 핵심을 이해할 수 있다.

커피를 주문하는 사람과 캐셔 그리고 바리스타는 각자의 역할(role)과 책임(responsibility) 속에서 커피를 주문하고 제조하는 협력(collaboration)의 과정을 이루어 간다.

이 때, 요청(request)과 응답(response)을 통해서 협력이 이루어지고 이를 통해서 인간은 거대하면서 복잡한 문제를 해결할 수 있는 공동체를 형성할 수 있다.


역할, 책임, 협력

시스템은 역할과 책임을 수행하는 객체로 분할되고 시스템의 기능은 객체 간 연쇄적인 요청-응답의 흐름으로 구성된 협력으로 구현된다.

객체의 역할은 다음과 같은 특징을 지닌다.

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

대체 가능한 역할과 책임은 객체지향 패러다임의 중요한 기반을 제공하는 다형성과도 깊이 연관되어 있다.


협력 속에 사는 객체

객체지향 애플리케이션의 윤곽을 결정하는 것은 역할, 책임, 협력 이지만 실제로 협력에 참여하는 주체는 객체 이다.

객체 는 두 가지 덕목을 갖추어야 한다.

  1. "협력적" 이어야 한다.
    - 다른 객체의 명령에 따라 행동하는 수동적인 존재를 의미하는 것은 X.
    - 객체는 다른 객체의 요청에 응답할 뿐이며, 어떤 방식으로 응답할지는 객체 스스로 판단하고 결정한다.
    - 요청에 응할지 여부조차 객체 스스로 결정할 수 있다.

  2. "자율적" 이어야 한다.
    • 공동의 목표를 달성하기 위해 협력에 참여하지만 스스로의 결정과 판단에 따라 행동하는 자율적인 존재
    • 커피 주문의 예시에서도 캐셔는 손님에게 음료를 주문받는 절차나 바리스타에게 커피 주문 내역을 전달하는 방법을 스스로 결정한다.

객체는 상태(state)행동(behavior) 을 함께 지닌 실체이다.
객체는 행동을 위해 필요한 상태를 포함하면서 동시에 특정한 행동을 수행하는 방법으로 스스로 결정할 수 있어야 함.
→ 바리스타는 커피 제조방법을 기억하고 있으며, 자신이 알고 있는 방법에 따라 스스로 커피를 제조한다.

"자율적인 객체로 구성된 공동체는 유지보수가 쉽고, 재사용이 용이하다."

객체지향의 세계에서는 메세지(message) 를 통해서 요청-응답을 주고 받는다.

  • 전송하는 객체 = 송신자(sender)
  • 수신하는 객체 = 수신자(receiver)

수신된 메시지를 처리하는 방법 > 메서드(method)

외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이며, 캡슐화(encapsulation)라는 개념과 관련되어 있다.


객체지향의 본질

저자는 다음과 같이 객체지향의 개념을 정리하고 있다.

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

객체지향 세계에서 클래스(class)와 클래스 사이의 상속이라는 개념도 마찬가지로 중요하지만, 결국 객체지향의 핵심은 객체이다.
클래스는 객체들의 협력관계를 코드로 옮기는 도구에 불과하다..

객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.

profile
개발 공부를 막 시작한 주니어입니다.

0개의 댓글