오브젝트 - 14 일관성 있는 협력

yshjft·2023년 6월 30일
0

오브젝트

목록 보기
14/18
  • 객체는 협력을 위해 존재
  • 객체지향 설계의 목표는 협력을 기반으로 결합도가 낮고 재사용 가능한 코드 구조를 창조하는 것
  • 일관서 있는 협력 패턴을 적용하면 코드가 이해하기 쉽고 직관적이며 유연해진다

01 핸드폰 과금 시스템 변경하기

기본 정책 확장

고정요금 방식 구현하기

시간대별 방식 구현하기

요일별 방식 구현하기

구간별 방식 구현하기

  • 비일관성의 문제점
    • 새로운 구현을 추가하면 추가할 수록 비일관성이 심해진다.
    • 코드를 이해하기 어렵다.
  • 유사한 기능을 서로 다른 방식으로 구현해서는 안된다는 것이다.

02 설계에 일관성 부여하기

  • 협력을 일관성 있게 만들기 위해서는...
    • 변하는 개념을 변하지 안흔 개념으로 분리
    • 변하는 개념을 캡슐화

조건 로직 대 객체 탐색

  • 클래스 분리 기준
    • 변경의 이유와 주기
  • 일관성 있는 협력을 위한 지침
    • 변하는 개념을 변하지 않는 개념으로부터 분리
    • 변하는 개념을 캡슐화

캡슐화 다시 살펴보기

  • 캡슐화란 변할 수 있는 모든 '개념'을 감추는 것
  • 데이터 캡슐화
    • 접근 제한자를 이용하 변수의 접근 제한
  • 메서드 캡슐화
    • 접근 제한자를 이용한 메서드 접근 제한
  • 객체 캡슐화
    • 합성
  • 서브타입 캡슐화
    • 다형성의 기반
  • 변하는 부분을 분리해서 타입 계층을 만든다.
    • 변하지 않는 부분으로 부터 변하는 부분을 분리
    • 변하는 부분들의 공통적인 행동을 추상 클래스나 인터페이스로 추상화
    • 변하는 부분들이 해당 추상 클래스나 인터페이스를 상속받게 만든다.
  • 변하지 않는 부분의 일부로 타입 계층을 합성한다.
    • 타입 계층을 변하지 않는 부분에 합성한다.
    • 변하지 않는 부분이 변경되는 구체적인 사항에 결합되지 않도록 만든다.

03 일관성 있는 기본 정책 구현하기

변경 분리하기

  • 일관성 있는 협력을 만드릭 위한 첫 번쨰 단계는 변하는 개념과 변하지 않는 개념을 분리하는 것

변경 캡슐화하기

  • 변경을 캡슐화하는 가장 좋은 방법은 변하지 않는 부분으로 변하는 부분을 분리하는 것

협력 패턴 설계하기

추상화 수준에서 협력 패턴 구현하기

  • 변하는 것과 변하지 안흔 것을 분리하고 변하는 것을 캡슐화한 코드는 오로지 변하지 않는 것과 추상황에 대한 의존성만으로도 전체적인 협력을 구현할 수 있다.

구체적인 협력 구현하기

시간대별 정책

요일별 정책

구간별 정책

  • 유사한 기능에 대해 유사한 협력 패턴을 적용하는 것은 객체지향 시스템에서 개념적 무결성(일관성)을 유지할 수 있는 가장 효과적인 방법이다.

협력 패턴에 맞추기

  • 가급적 기존의 협력 패턴에 맞추는 것이 가장 좋은 방법이다.
    • 개념적 무결서을 무너뜨리는 것보다는 약간의 부조하를 수용하는 편이 더 낫다.

패턴을 찾아라

profile
꾸준히 나아가자 🐢

0개의 댓글