티스토리 뷰

자율적인 책임

  • 객체들은 애플리케이션의 기능 구현을 위해 협력하고 협력 과정에서 자율적으로 판단하고 행동함
  • 자율적인 객체란 스스로의 의지와 판단에 따라 맡은 책임을 수행하는 객체를 의미

증언에서의 자율적 책임

  1. 자율적인 방식으로 증언할 책임을 지는 모자장수
    • 모자장수의 경우 증언할 책임은 있지만 증언을 위한 구체적인 방법 및 절차는 자율적임
    • 모자장수는 증언만 한다면 증언하는 방식에 대해서는 자율적으로 행동함

2. 상세한 수준의 책임을 요청받아 수행하는 모자 장수

  • 왕이 모자장수에게 증언에대한 행동을 구체적으로 요구함 (자율성 침해)
  • 왕에대한 의존도가 높아져 모자장주의 책임을 수정하기 어려워짐 ex) 시간 순서대로가 아닌 생각나는대로 말 할수가 없음

너무 추상적인 책임

  • 협력의 의도를 명확하게 표현하지 못할 정도로 추상적인것 또한 문제임
  • 아래의 그림처럼 설명하라는것이 무엇에 대한 설명을 하라는것인지 너무 추상적임
  • 책임은 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준에서 추상적이여야 함

메시지와 메서드

메시지

  • 메시지는 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 소통 수단
  • 객체가 메시지를 수신할 수 있다는것은 해당하는 책임을 수행할 수 있다는 것을 의미
  • 메시지를 처리하기 위한 방법은 자율적으로 판단함
  • 외부 객체는 메시지만 볼수있고 객체 내부는 볼수 없기때문에 객체의 외부와 내부가 분리됨

메서드

  • 메시지 수신 → 메시지 처리 가능 판단 → 메시지를 처리할 메서드 선택 후 실행
  • 메시지를 수신한 객체가 실행 시간에 메서드를 선택하는것은 객체지향 언어의 핵심적 특징

다형성

  • 다형성이란 서로 다른 유형의 객체가 동일한 메시지에 대해 다르게 반응하는것을 의미 ex) 앞서 이야기에서 모자장수, 요리사, 앨리스 모두 ‘증언하라’라는 메시지를 수신 가능하지만 처리 방법은 각기 다름
  • 송신자 관점에서 다형적인 수신자들을 구별할 필요가 없으며 요청을 수행할 책임을 지닌다는 점에서 모두 동일함 ex) 모자장수, 요리사, 앨리스 모두 ‘증언하라’라는 책임은 동일 (증인 역할)
  • 다형성은 동일한 역할을 수행할 수 있는 객체들 사이의 대체 가능성을 의미, 수신자의 종류를 캡슐화 함.
  • 객체지향 패러다임이 강력한 이유는 다형성을 이용해 협력을 유연하게 만들 수 있기때문

다형성을 이용한 유연한 협력의 의미

송신자가 수신자에 대해 매우 적은 정보만 아는 상태에서의 협력은 설계의 품질에 큰 영향을 미침

  1. 협력이 유연해짐
    • 송신자는 수신자가 메시지를 이해한다면 다른 타입의 객체로 대체하더라도 관계없음
  2. 협력이 수행되는 방식을 확장 가능함
    • 수신자 교체가 가능하기 때문에 수행방식을 쉽게 변경(수정) 가능함
  3. 협력이 수행되는 방식을 재사용할 수 있음
    • 다양한 객체들이 수신자를 대체할 수 있기 때문에 다양한 협력에서 재사용 가능

메시지 따르기

객체지향의 핵심, 메시지

  • 객체지향의 기본 개념은 책임을 수행하는 자율적인 객체들의 협력
  • 객체들이 서로 협력하기 위한 유일한 소통 방법은 메시지를 전송하는 것
  • 클래스는 단지 동적인 객체들의 상태와 행위를 정적인 텍스트로 표현하기 위한 도구일뿐 클래스 정의가 먼저가 아닌 객체들의 속성과 행위를 식별하는 것이 먼저임
  • 객체를 식별시에는 개별적인 객체가 아닌 객체들 사이에 주고받는 메시지에 초점을 맞춰야함
  • 객체가 메시지를 선택하는 것이 아닌 메시지가 객체를 선택하게 만들어야함
    • 메시지부터 고려하는 이유는 전체 협력을 먼저 생각해서이기 때문 객체만 두고 어떤 책임(메시지)을 부여할까 고민하면 전체 협력을 고려하지 못하기 때문..인듯?

What/Who 사이클

  • What/Who 사이클이란 어떤 행위가 필요한지를 먼저 결정 후에 이 행위를 수행할 객체를 결정하는것
  • 협력이라는 문맥 안에서 메시지를 먼저 결정하고 해당 메시지를 수신하기 적합한 객체를 선택
  • 수신 가능한 메시지가 모여 객체의 인터페이스를 구성함

묻지말고 시켜라

  • 객체는 다른 객체의 상태를 묻지말아야 함
  • 필요한 메시지를 전송(요청)하기만 하고 수신하는객체가 자율적으로 처리하도록 해야함

객체 인터페이스

인터페이스

  • 인터페이스란 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법 또는 장치

인터페이스의 특징

  1. 인터페이스의 사용법을 익히면 내부 구조나 동작 방식은 몰라도 쉽게 조작 가능함
    • 운전자는 핸들, 엑셀, 브레이크(인터페이스)만 알면 내부 구조에 관계없이 운전이 가능함
  2. 인터페이스 자체는 변경하지 않고 단순히 내부 수정하는 사용자에게 어떠한 영향도 미치지 않음
    • 정비소에서 자동차 엔진을 변경해도 운전 방법이 달라지지는 않음
  3. 대상이 변경되더라도 동일한 인터페이스를 제공하면 문제없이 상호작용 가능
    • 하나의 자동차를 운전할줄 알면 다른 종류의 자동차도 운전 가능함

메시지가 인터페이스를 결정

  • 객체의 인터페이스는 객체가 수신할 수 있는 메시지 목록으로 구성됨

공용 인터페이스

  • 외부에 공개된 인터페이스를 공용 인터페이스라고 함
  • 객체의 공용 인터페이스를 구성하는 것은 외부로부터 수신할 수 있는 메시지의 목록

인터페이스와 구현의 분리

객체지향적인 사고방식을 위한 3가지 법칙

  1. 너무 구체적인 인터페이스보다는 추상적인 인터페이스를 설계할 것
  2. 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 말것
  3. 인터페이스와 구현을 분리 할 것

인터페이스와 구현의 분리

  • 훌륭한 객체란 구현은 모른 채 인터페이스만 알면 쉽게 사용할 수 있는 객체를 의미
  • 핵심은 객체를 외부에 공개되는 인터페이스와 내부에 감춰지는 구현 2개의 분리된 요소로 분할해 설계하는것
  • 객체의 구현을 인터페이스 뒤로 감추는 것은 객체의 자율성을 향상시킬수 있는 가장 기본적인 방법
  • 객체 외부에 영향을 미치는 변경은 오직 공용 인터페이스를 수정할 때 뿐이어야 함

캡슐화

  • 객체의 자율성을 보존하기 위해 구현을 외부로부터 감추는 것을 캡슐화(정보 은닉) 라고함

책임의 자율성이 협력의 품질을 결정한다

  • 객체의 책임이 자율적일수록 협력이 이해하기 쉬워지고 변경에 유연하기 때문

이유

  1. 자율적인 책임은 협력을 단순하게 만든다.
    • 자율적인 책임은 세부사항은 무시하고 의도를 드러내는 하나의 문장으로 표현함으로써 협력을 단순화함 (추상화)
  2. 자율적인 책임은 외부와 내부를 명확하게 분리한다.
    • 요청하는 객체가 몰라도되는 사적인 부분은 객체 내부로 캡슐화 시킴 (인터페이스와 구현 분리)
  3. 책임이 자율적일 경우 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않는다.
    • 변경의 파급효과가 객체 내부로 캡슐화되기 때문에 두 객체간 결합도가 낮아짐
  4. 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다.
  5. 객체가 수행하는 책임들이 자율적일수록 객체의 역할을 이해하기 쉬워진다.
책임이 자율적일수록 적절하게 추상화되며 응집도가 높아지고 결합도가 낮아지며 캡슐화가 증진되고 인터페이스와 구현이 분리되며 설계의 유연성과 재사용성이 향상된다!!
객체지향의 강력함을 누리기 위한 출발점은 책임을 자율적으로 만드는것!!

 

'독서 > 객체지향의 사실과 오해' 카테고리의 다른 글

chapter7. 함께 모으기  (1) 2023.12.22
chapter6. 객체지도  (1) 2023.12.22
chapter4. 역할, 책임, 협력  (1) 2023.12.22
chapter3. 타입과 추상화  (0) 2023.12.22
chapter2. 이상한 나라의 객체  (0) 2023.12.22
댓글