코드로 우주평화

일하는 객체들이 서로 협력하는 관계를 구축하는 것 본문

나는 이렇게 본다/객체지향의 사실과 오해

일하는 객체들이 서로 협력하는 관계를 구축하는 것

daco2020 2022. 2. 7. 15:15

제목 : 객체지향의 사실과 오해

저자 : 조영호

범위 : 01 / 협력하는 객체들의 공동체

 


 

요약 정리

  • 객체지향의 목표는 실세계를 모방하는 것이 아니다. 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다.
  • 현실 세계와 비유하는 것은 '상태'와 '행위'를 [캡슐화]하는 소프트웨어 객체의 [자율성]을 설명하는 데 효과적이기 때문
  • 객체는 상태와 행위를 하나의 단위로 묶는 자율적인 존재
  • 객체지향에서 가장 중요한 개념 세 가지는 '역할', '책임', '협력'이다.
    • 여러 객체가 동일한 역할을 수행할 수 있다.
    • 역할은 책임(일), 임무를 의미한다. (손님, 점원, 바리스타)
    • 역할은 대체 가능하다. (부품)
    • 책임을 수행하는 방법(일하는 방법)은 객체가 자율적으로 선택할 수 있다. → 다형성과 관련
    • 객체는 동시에 여러 역할을 수행할 수 있다.
  • 협력의 핵심은 요청과 응답을 통해 목표를 달성한다는 것이다.
  • 객체에게 적절한 임무를 할당해야한다.
  • 역할은 관련성 높은 임무들의 집합이다.
  • 객체는 협력을 통해 기능을 구현한다.
  • 객체는 두 가지 덕목을 갖춰야 한다.
    1. 협력적이어야 한다. 외부의 도움이 필요없는 객체는 복잡도가 증가해 자멸한다. → 쉽게 말하자면 분업화인 것 같다.
    2. 자율적이어야 한다. 스스로 원칙에 따라 일을 하거나 통제하여 절제한다.(통제와 절제는 또 뭔가..? 인공지능인가?)
  • 객체는 다른 객체가 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지에 대해서는 알 수 없다. → 객체의 존재이유는 알지만 어떻게 하는지는 모른다.(print()는 알지만 어떻게 작동하는지는 모르는 것처럼)
  • 객체들은 메시지로 소통한다. (sender 와 receiver)
  • 수신된 메시지(제조 요청)를 처리하는 방법(제조 방법)은 메서드라고 한다.
  • 객체지향의 본질
    • 객체지향이란 자율적인 객체를 이용해 시스템을 분할하는 방법 → 개별적인 객체들이 모여 하나를 이룬다라는 느낌
    • 자율적인 객체란 상태와 행위를 함께 지니며 일을 하는 객체를 의미
    • 유사한 일(책임)의 집합이 역할
    • 메시지를 수신하고 자율적으로 메서드를 선택하여 처리 (→ 여기서 ‘자율’은 개발자가 코드로 분기를 나눈다는 걸까? 아니면 객체가 인공지능이란 얘기인가?)
  • 객체와 클래스는 동의어가 아니다. 객체지향의 핵심은 ‘일하는 객체(역할)들이 서로 협력하는 관계를 구축하는 것’이다.

 

 

하고 싶은 말

  • 책임진다라는 말을 이해하는게 어렵다. 그래서 중간부터는 임무나 일, 해야만하는 의무로 받아들였다.
  • 자율적이라는 개념을 이해하기 어렵다. 마치 객체가 인공지능인 것처럼 느껴졌다. 어쨌든 요청이 와야 동작하는 것이고 그 요청 내용에 따라 방법이 달라지는 것이 아닌가? 요청 내용과 상관없이 객체가 랜덤으로 방법을 선택하거나 특정한 생각을 가지고 선택하는 건 아닐 것 같은데 일단 글만 보면 그렇게 느껴진다.
  • 객체지향을 아직 이해하기가 어렵다. 더 공부하면서 지금 드는 의문들을 해소해보자.