ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향의 사실과 오해] 객체지향 설계의 관점과 추상화 기법
    Book/객체지향의 사실과 오해 2023. 3. 14. 17:17

    객체지향 설계

    관점

    • 개념 관점(Conceptual Perspective)
      • 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현
      • 사용자가 도메인을 바라보는 관점을 반영
      • 실제 도메인의 규칙과 제약을 최대한 유사하게 반영
    • 명세 관점(Specification Perspective)
      • 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점 이동
      • 도메인이 아닌 객체들의 책임에 초점
      • 객체가 협력을 위해 무엇을 할 수 있는가에 초점
    • 구현 관점(Implementation Perspective)
      • 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성하는 것
      • 객체의 책임을 어떻게 수행할 것인가에 초점
      • 인터페이스를 구현하는데 필요한 속성과 메서드를 클래스에 추가
    • 클래스의 공용 인터페이스는 명세 관점을 반영, 클래스의 속성과 메서드는 구현 관점을 반영
    • 세가지 관점을 모두 수용하도록 해야함
    • 명세관점과 구현관점을 분리하는 것도 중요

     

    추상화

    추상화 기법

    • 분류와 인스턴스화
      • 분류는 객체의 구체적인 세부 사항을 숨기고 인스턴스 간에 공유하는 공통적인 특성을 기반으로 범주를 형성
      • 분류의 역은 범주로부터 객체를 생성하는 인스턴스화 과정
      • 개념과 분류
        • 분류 : 객체에 개념을 적용하는 과정
        • 개념 : 타입
        • 객체 : 타입의 인스턴스
        • 타입
          • 심볼, 내연, 외연
        • 집합
          • 단일분류 : 한 객체가 한 시점에 하나의 타입에만 속하는 것
          • 다중분류 : 한 객체가 한 시점에 여러 타입에 속하는 것
          • 객체 지향 프로그래밍 언어는 단일 분류만 지원
          • 타입 변경
            • 동적 분류 : 객체가 한 집합에서 다른 집합의 원소로 자신이 속하는 타입을 변경할 수 있는 경우
            • 정적 분류 : 객체가 자신의 타입을 변경할 수 없는 경우
          • 개념적인 관점에서 다중 분류와 동적 분류를 함께 적용하는 것이 실세계 복잡성을 모델링하는데 유용
          • 대부분의 언어는 객체 타입 변경이 불가능 => 동적 분류 구현 못함
          • 다중분류와 동적분류 관점에서 도메인 모델 초안을 만든 후 단일 분류와 정적 분류 방식으로 객체 범주 조정할 것
    • 일반화 특수화
      • 일반화는 범주 사이의 차이를 숨기고 범주 간에 공유하는 공통적인 특성을 강조
      • 일반화의 역을 특수화
      • 타입
        • 서브타입
        • 슈퍼타입
        • is-a 관계
          • 일반화 관계
          • 서브타입이 슈퍼타입의 부분집합
      • 상속
        • 구조적인 순응 : 서브타입은 슈퍼타입이 가지고 있는 속성과 연관관계 면에서 일치해야함
        • 행위적인 순응 : 서브타입은 슈퍼타입을 행위적으로 대체 가능
          • 리스코프 치환 원칙
        • 사용
          • 서브타이핑 : 서브클래스가 슈퍼클래스를 대체할 수 있는 경우 
            • 인터페이스 상속
          • 서브클래싱 : 서브클래스가 슈퍼클래스를 대체할 수 없는 경우 
            • 서브클래싱을 구현 상속
          • 서브타이핑은 구조적, 행위적 순응 관계를 의미하며 대체가능성을 내포하여 되도록 서브타이핑의 대체 가능성을 준수하도록 사용
        • 위임 : 여러 클래스로 구성된 상속 계층에서 수신된 메시지를 이해하는 방법
          • 수신된 메시지를 이해할 수 없을 때 부모 클래스로 위임
    • 집합과 분해
      • 집합은 부분과 관련된 세부사항을 숨기고 부분을 사용해서 전체를 형성하는 과정
      • 집합의 반대 과정은 전체를 부분으로 분리하는 분해 과정
      • 집합은 전체의 내부로 불필요한 세부사항을 감춰주기 때문에 캡슐화 메커니즘임
      • 합성 관계
        • 부분을 전체 안에 캡슐화함으로써 인지 과부하를 방지
        • 포함하는 객체가 제거될 때 내부에 포함된 객체도 함께 제거됨(주문-주문항목)
      • 연관 관계
        • 단순한 연결 관계
        • 연결된 두 객체가 독립적으로 제거됨(주문항목 - 상품)
      • 패키지 또는 모듈
        • 관련된 클래스 집합을 하나의 논리적인 단위로 묶는 구성요소

     

     

    댓글

Designed by Tistory.