[OOP] 객체지향의 사실과 오해 Chapter 4~5 책임-주도 설계, 인터페이스

janeljs·2021년 2월 12일
2
post-thumbnail

객체지향 설계

  • 적절한 책임을 적절한 객체에게 할당하면서 메시지를 기반으로 협력하는 객체들의 관계를 발견하는 과정
  • 객체지향에서 자기 자신과의 상호작용을 포함한 모든 상호작용은 메시지를 통해서만 이루어진다.

책임-주도 설계(Responsibility-Driven Design)

  • 책임을 완수하기 위해 협력하는 객체들을 이용해 시스템을 설계하는 방법
    → 협력에 필요한 책임들을 식별하고 적합한 객체에게 할당하는 방식으로 설계한다.
  • 어떤 행위가 필요한지(메시지)를 먼저 결정한 후에 행위를 수행할 객체를 결정한다(What/Who 사이클).
  • 객체의 책임이 얼마나 자율적인지에 따라 협력의 품질이 결정된다.

    객체의 책임이 자율적일수록
    1) 적절하게 추상화된다.
    2) 응집도가 높아진다.
    3) 결합도가 낮아진다.
    4) 캡슐화가 증진된다.
    5) 인터페이스와 구현이 명확히 분리된다.
    6) 설계의 유연성과 재사용성이 향상된다.

디자인 패턴(Design Pattern)

  • 전문가들이 반복적으로 사용한느 해결 방법을 정의해 놓은 설계 템플릿의 모음
  • 책임-주도 설계의 결과를 표현하며, 일반적으로 반복적으로 발생하는 문제와 그 문제에 대한 해법의 쌍으로 정의된다.

테스트-주도 개발(Test-Driven Development)

  • 실패하는 테스트를 작성하고, 테스트를 통과하는 가장 간단한 코드를 작성한 후, 리팩터링을 통해 중복을 제거하여 클린 코드를 얻는 개발 방법
  • 응집도가 높고 결합도가 낮은 클래스로 구성된 시스템의 개발을 지향한다.
    • 변경의 파급효과를 객체 내부로 캡슐화하면 두 객체 간의 결합도가 낮아진다.
  • 테스트-주도 개발은 단순히 테스트를 작성하는 것이 아니라 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고, 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드로 작성하는 것이다.

인터페이스

  • 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법이나 장치
  • 객체의 공용 인터페이스는 객체가 외부로부터 수신할 수 있는 메시지의 목록이다.
    → 객체가 어떠한 메시지를 수신할 수 있느가에 따라 객체의 책임과 인터페이스가 결정된다.

인터페이스의 특징

  1. 사용 방법을 익히면 내부 구조나 동작 방식을 몰라도 대상을 조작하거나 의사를 전달할 수 있다.
  2. 인터페이스의 사용자는 인터페이스의 내부 구성이나 작동 방식의 변경에 영향을 받지 않는다.
  3. 동일한 인터페이스가 제공된다면 어떤 대상과도 상호작용할 수 있다.

인터페이스 설계의 원칙

  1. 추상적인 인터페이스를 지향한다.
    → 너무 구체적인 인터페이스(how를 지정해주는 인터페이스)는 객체의 자율성을 저해한다.
    → how가 아닌 what을 지정해주는 인터페이스를 작성하자.
  2. 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 않는다(minimal interface).
    → 인터페이스를 최소로 유지하면 객체의 내부 동작에 대한 외부 노출을 최소화할 수 있다.
    → 객체 내부의 수정이 외부에 미치는 영향을 최소화할 수 있다.
  3. 인터페이스와 구현을 분리한다.
    • 객체의 외부: 공용 인터페이스
    • 객체의 내부: 구현
      • 상태
      • 메서드 (행동)
        • 객체가 메시지를 수신했을 때 책임을 수행하는 방법
        • 메시지와 메서드의 구분은 객체 외부와 내부를 명확하게 구분하는 동시에 다형성을 통해 여러 타입의 객체를 수용할 수 있는 유연성을 허용한다.

Source

  • 객체지향의 사실과 오해 (조영호 저)

2개의 댓글

comment-user-thumbnail
2021년 2월 13일

우옹 정리 엄청 잘 해놓으셨네요!👍👍

  • 앗 그리고 이건 정말 마이너한 typo지만!! 책임주도 설계 아래 인용구 부분에 4) 캠슐화 라고 되어있어용!!
1개의 답글