본문 바로가기
TechBooks

[Programming] 객체지향의 사실과 오해 #5장

by 꿈나무 김땡땡 2020. 7. 11.

책 소개

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

저자 : 조영호

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=60550259

 

객체지향의 사실과 오해

위키북스 IT Leaders 시리즈 23권. 객체지향이란 무엇인가? 이 책은 이 질문에 대한 답을 찾기 위해 노력하고 있는 모든 개발자를 위한 책이다.

www.aladin.co.kr

 

5장. 책임과 메시지

의도는 메시징이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 "모듈이 어떻게 커뮤니케이션 하는가"에 달려 있다.
- 앨런 케이 (Kay)

 

1. 자율적인 책임

  • '자율성'이 핵심. 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체
  • 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다.
  • 협력에 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질 결정
  • 자율적인 책임의 특징 : "어떻게(how)"가 아니라 "무엇(what)"을 해야 하는가를 설명

2. 메시지와 메서드

1) 메시지

  • 메시지 : 객체가 다른 객체에게 접근할 수 있는 유일한 방법 (다른 객체가 행동을 수행하게 한다)
    • Message Name : 메시지를 가리킨다.
    • Argument : 메시지의 추가적인 정보를 제공한다.

2) 메서드

  • 메서드 : 메시지를 처리하기 위해 내부적으로 선택하는 방법 (책임을 수행하는 행동)
  • 메시지를 수신한 객체가 메서드를 선택할 수 있다는 것은 객체지향 프로그래밍 언어의 특징

3) 다형성

  • 다형성 : 서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응 (서로 다른 메서드로 메시지 처리)
  • 다형성은 객체 간 '대체 가능성'을 의미

4) 유연하고 확장 가능, 높은 재사용성을 가진 협력

  • 송신자가 수신자에 대해 매우 적은 정보만 알아도 협력 가능
    • 유연한 협력 가능
    • 협력이 수행 되는 방식 확장 가능
    • 협력이 수행되는 방식 재사용 가능
  • 송신자와 수신자는 '메시지'가 연결한다 (약한 연결)

3. 메시지를 따라라

  • 객체 지향 프로그래밍 : 메시지를 주고받는 동적 객체들의 집합
  • 메시지가 수신자의 책임을 결정한다. (도움이 필요한 경우 메시지 결정 -> 도움을 줄 객체 결정 -> 객체의 책임 결정)
  • What/Who 사이클 : 어떤 행위가 필요한지 먼저 결정한 후에 이 행위를 수행할 객체 결정
  • 묻지 말고 시켜라 : 메시지가 어떻게 해야하는지를 지시하지 말고 "무엇을 해야하는지 요청"하라

4. 객체 인터페이스

  • 인터페이스 : 어떤 두 사물이 마주치는 경계 지점에서 서로 상호작용 할 수 있게 이어주는 방법이나 장치
  • 인터페이스의 3가지 특징
    1. 인터페이스의 사용법만 알면 대상의 내부 구조나 동작 방법을 몰라도 상호작용 가능
    2. 인터페이스가 변경되지 않고 단순히 내부 구성이나 작동 방식이 변경되는 것은 인터페이스 사용자에게 아무런 영향도 미치지 않는다.
    3. 인터페이스가 동일하기만 하면 어떤 대상과도 상호작용 할 수 있다.
  • 공용 인터페이스 : 외부에 공개된 인터페이스 (<-> 사적인 인터페이스(=구현) : 내부에서만 접근 가능)

5. 인터페이스와 구현의 분리

  • 객체지향 사고 방식의 3가지 원칙
    1. 좀 더 추상적인 인터페이스 : 추상적인 수준의 메시지로 객체 자율성 높임
    2. 최소 인터페이스 : 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 말라
    3. 인터페이스와 구현 간에 차이가 있다
  • 구현(Implementation) : 내부 구조와 작동 방식 (<-> 공용 인터페이스)
  • 인터페이스와 구현의 분리 원칙 (Seperation of Interface and Implementation) : 객체 외부에 노출되는 인터페이스와 객체 내부에 숨겨지는 구현을 명확하게 분리
  • 캡슐화 (= 정보 은닉. Information Hiding) : 객체의 자율성을 보존하기 위해 구현을 외부로부터 감추는 것
    • 상태와 행위의 캡슐화 (데이터 캡슐화. Data Encapsulation)
      • 객체는 스스로 자신의 상태를 관리하며 상태를 변경하고 외부에 응답할 수 있는 행동을 내부에 함께 보관
      • 상태는 데이터로, 행동은 프로세스로 구현
    • 사적인 비밀의 캡슐화
      • 변경이 일어나는 불안정한 비밀을 캡슐화해서 숨긴다.

6. 책임의 자율성이 협력의 품질을 결정

  • 객체의 책임이 자율적일수록 협력을 이해하기 쉽고, 유연하게 변경할 수 있다. 책임이 얼마나 자율적인지가 전체적인 협력의 설계 품질 결정
    1. 자율적인 책임은 협력을 단순하게 만든다.
    2. 자율적인 책임은 모자 장수의 외부와 내부를 명확하게 분리한다.
    3. 책임이 자율적일 경우 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않는다.
    4. 자율적인책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다.
    5. 객체가 수행하는 책임들이 자율적일수록 객체의 역할을 이해하기 쉬워진다.

댓글