Home 객체지향의 사실과 오해 - 조영호
Post
Cancel

객체지향의 사실과 오해 - 조영호

객체지향이란 “자율적인 객체들의 공동체를 설계” 하는 것이다.

객체지향의 주요개념

  • “역할, 책임, 협력”
  • 객체지향은 “책임” 이 부여된 객체들이 서로 “협력”하도록 설계하는 것
  • “역할” 은 책임의 집합을 표현하는 페르소나
  • “협력”은 객체들 간에 메세지를 전송하는 것으로 기능한다.

객체는

  • “상태, 행동, 식별자”로 표현될 수 있다.
  • 객체가 실제세계의 반영이라는 것은 “오해”다.
    • 객체는 실제 세계의 무언가를 “의인화”한 것으로 이해하면 용이하다.
    • 객체에 대해 실제 세계는 “은유” 표현으로 생각할 수 있다.

추상화는:

  • 공통점으로 객체를 묶고, 객체간의 차이점을 무시하여 분류(classification)하는 것
  • 추상화의 대상은:
    • 행동으로 정의되어야 한다.
      • 이러한 특성으로 인해서, 추상화된 객체는 다형성과 캡슐화의 특성을 가진다.

타입

  • 타입도 일종의 추상화이다.
  • 타입을 쓰는 이유는, 객체의 “동적인 특성”을 추상화 할 수 있기 때문이다.
    • 예를들어, 사칙연산이 가능한 어떤 값들을 ‘숫자’ 로 정의해두었다면 “숫자 타입”의 프로퍼티가 동적으로 변화하더라도, 이 프로퍼티를 가지는 객체는 정적인 형태로 추상화가 가능해진다.

역할, 책임, 협력

  • 책임은:
    • 다음의 행동들을 의미
      • 요청한 객체에게 응답을 주거나,
      • 요청이 오면 자신의 상태를 변경하거나,
      • 다른 객체에게 요청을 하는 것
    • 위와 같이, 책임은 응집도 있는 행동들의 집합이기 때문에 객체의 공용 인터페이스(public interface) 로 노출된다.
  • 협력
  • 역할은:
    • 유사한 협력을 추상화한 것
    • 역할은 협력의 추상화이기 때문에, 해당 역할의 대상 객체는, 동일한 역할을 수행하는 다른 객체에 의해 대체될 수 있다.

객체지향 설계 기법

  • 책임-주도 설계: 역할, 책임, 협력에 집중해 설계
  • 디자인 패턴: 책임-주도 설계의 답안지
  • 테스트 주도 개발: 행동을 먼저 정의하기 때문에 좋은 프랙티스이다.

메세지

  • 객체는 자율적이어야 한다.
    • 메세지의 추상화의 수준은 너무 두루뭉술해도, 너무 세세해도 안된다.
    • 실제로 객체 안에서 수행하는 부분은 객체에게 맡긴다.
  • 메세지를 중심으로 설계해야 한다.
    • ‘어떻게’ 가 아니라 ‘무엇’을 하는지를 인터페이스로 결정해야 한다.
    • 인터페이스와 구현은 분리해야 한다.
  • 왜 좀 더 나은 설계라는 것이 존재할까?
    • 이해하기 쉽고, 변경에 유연한 설계가 있음

      객체의 책임이 자율적일수록 협력이 이해하기 쉬워지고, 유연하게 변경할 수 있게 된다.

객체지도

  • 설계의 1차적인 목표는 변경에 소요되는 비용을 낮추는 것이다.
    • 구조적 설계가, 기능적 설계에 비해 변경에 좀 더 용이하기 때문에 비용을 낮출 수 있다.
  • 도메인 모델은 이해관계자들이 바라보는 멘탈 모델(Mental Model)
    • 안정적 모델: 도메인 모델을 사용하면, 비교적 변경이 덜하기 때문
  • 유스케이스 모델은 기능적 모델
    • 불안정한 모델: 기능은 잘 변경된다.
    • 유스케이스는 사용자와 시스템 간의 상호작용을 보여주는 ‘텍스트’다. 다이어그램에 집착하지 말라.
  • 위 두가지, 도메인 모델과 유스케이스로부터, 객체와 책임(메세지 전송)을 뽑아 설계를 할 수 있다.
This post is licensed under CC BY 4.0 by the author.
Trending Tags
Contents
Trending Tags