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

sarang_daddy·2023년 2월 8일
0

학습 👨‍🎓

목록 보기
1/4
post-thumbnail

코드스쿼드 마스터즈 코스를 진행하면서 초급자 코스의 인터넷 강의로만 공부해본 쌩초보인 나에게는 객체 지향(객체중심)적으로 코딩을 한다는게 참 낯설고 어렵게 느껴진다. (추상화... 어렵당..😂)

그래서 전공자들은 모두 읽어 봤다는(?) 토끼책으로 유명한 "객체지향의 사실과 오해"를 읽고 정리하여 객체 지향 프로그래밍과 친해져보자.

서문

  1. 객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것.
  2. 객체를 독립적인 존재가 아닌 협력하는 공동체로 바로 보는 것.
  3. 협력에 참여하는 객체들에게 적절한 역할과 책임을 부여하는 것.
  4. 앞에 3가지를 프로그래밍 언어에 잘 담아내는 기술을 가지는 것.

1장 협려하는 객체들의 공동체

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

객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다.

역할과 책임

객체들은 협력하는 과정 속에서 역할(role)를 부여 받는다.
역할 이라는 단어는 의미적으로 책임이라는 개념을 내포한다.

즉, 객체들은 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행한다.

객체지향 설계는 적절한 객체에게 적절한 책임을 할당하는 것에서 시작된다.

객체 역할의 특성

  • 여러 객체가 동일한 역할을 수행할 수 있다.
    : 주문을 받는다 라는 책임을 이룬다면 어떤 객체든 수행할 수 있다.
  • 역할은 대체 가능성을 의미한다.
    : A객체가 역할을 수행하지 못한다면 다른 B객체가 수행하게 할 수 있다.
  • 각 객체는 책임을 수행하는 방법을 자율적으로 선택 할 수 있다.
    : 주문을 받는다 라는 책임에 위반되지 않는다면 어떤식으로 주문을 받는지 객체는 선택 할 수 있다.
  • 하나의 객체가 동시에 여러 역할을 수행할 수 있다.
    : 주문을 받는 객체는 커피를 만드는 역할을 수행할 수도 있다.

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

객체지향은 인간의 사회와 유사하게 만들어 가는 과정이다.
여기서 객체는 인간 사회처럼 협력적이여야 하며, 스스로의 결정과 판단을 할 수 있도록 자율적이어야 한다.

객체가 협력에 참여하기 위해 어떤 행동을 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다. 협력에 참여하는 과정속에서 스스로 판단하고 결정하는 자율적인 존재가 되기 위해서는 행동과 상태를 함께 가지고 있어야 한다.

객체지향에서는 데이터와 프로세스를 객체하는 하나의 틀 안에 함께 묶어 놓음으로써 객체의 자율성을 보장한다.

메서드와 자율성

객체는 다른 객체와 협력하기 위해 메시지를 전송한다. 메시지를 받은 객체는 이해 여부를 판단 후 정해진 자신만의 방법에 따라 메시지를 처리한다. 이 메시지를 처리하는 방법을 메서드라고 부른다.

객체(클래스) 안에는 여러 메서드가 존재할 수 있으며, 수신된 메시지를 객체가 어떤 메서드로 실행할지 선택 할수 있다는 점은 객체지향 프로그래밍 언어의 핵심적인 특징이다.

"커피를 주문받은 바리스타는 고객에게 커피를 제공해 주면 된다. 커피가 머신으로 만들어지든 수작업으로 만들어지든 그것은 바리스타가 선택한다."

수신되는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다.

객체지향의 본질

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

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

profile
한 발자국, 한 걸음 느리더라도 하루하루 발전하는 삶을 살자.

0개의 댓글