객체지향의 사실과 오해

오해를 덜어낸 객체지향 구현 로직

  1. (클래스가 아니라)특정한 객체를 상상하고, 우선 객체의 행동을 정의하자
  2. 정의된 행동을 기반으로 협력의 공동체를 상상해보자. 이 공동체는
    • 요청과 응답의 흐름으로 소통할 것이고
    • 공동체의 구성원에게는 여러가지 책임이 할당된다
  3. 다음으로 협력에 필요한 데이터 필드가 있다면 이를 정의하자. 잊지말자 상태보다 협력이 우선이다
  4. 마지막으로, (이제서야) 클래스를 구현해야한다. 게다가 클래스는 ‘타입’을 구현하기 위한 수단에 불과하다

더 구체적인 설계와 구현

Screen Shot 2019-10-03 at 10 13 22 PM

  • 구조설계: 도메인 모델

    • 도메인의 본질적인 부분을 개념으로 모델링
    • 안정적인 ‘구조’의 설계
  • 기능적 요구사항 추출: 유스케이스

    • 사용자와 시스템이 상호작용하는 케이스들
    • 즉 공통의 사용자 목표를 추출하는 시나리오(유저 플로우)의 집합
  • 합치기: 구조와 기능을 통합해 클래스를 설계하고 구현한다

클래스 설계와 구현

동일한 클래스들을 세가지의 관점으로 나누어 바라보며 설계&구현한다

  1. 개념관점
    • 도메일 모델과 유스케이를 참고하여 특정 객체의 협력을 상상하고 필요한 개념을 구체화한다
  2. 명세관점
    • 사용자 영역에서 개발자 영역으로 넘어가는 단계
    • 객체의 책임을 명세한다. 즉, 인터페이스를 프로그래밍한다
    • 인터페이스의 형태는 보통 클래스 메소드의 시그니쳐로 표현된다
  3. 구현관점
    • 객체의 책임을 객체 내부적으로 구현한다
    • 구현의 형태는 클래스 프로퍼티와 메소드이다

refs