-
[객체지향의 사실과 오해] 객체지향 설계의 관점과 추상화 기법Book/객체지향의 사실과 오해 2023. 3. 14. 17:17728x90
객체지향 설계
관점
- 개념 관점(Conceptual Perspective)
- 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현
- 사용자가 도메인을 바라보는 관점을 반영
- 실제 도메인의 규칙과 제약을 최대한 유사하게 반영
- 명세 관점(Specification Perspective)
- 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점 이동
- 도메인이 아닌 객체들의 책임에 초점
- 객체가 협력을 위해 무엇을 할 수 있는가에 초점
- 구현 관점(Implementation Perspective)
- 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성하는 것
- 객체의 책임을 어떻게 수행할 것인가에 초점
- 인터페이스를 구현하는데 필요한 속성과 메서드를 클래스에 추가
- 클래스의 공용 인터페이스는 명세 관점을 반영, 클래스의 속성과 메서드는 구현 관점을 반영
- 세가지 관점을 모두 수용하도록 해야함
- 명세관점과 구현관점을 분리하는 것도 중요
추상화
추상화 기법
- 분류와 인스턴스화
- 분류는 객체의 구체적인 세부 사항을 숨기고 인스턴스 간에 공유하는 공통적인 특성을 기반으로 범주를 형성
- 분류의 역은 범주로부터 객체를 생성하는 인스턴스화 과정
- 개념과 분류
- 분류 : 객체에 개념을 적용하는 과정
- 개념 : 타입
- 객체 : 타입의 인스턴스
- 타입
- 심볼, 내연, 외연
- 집합
- 단일분류 : 한 객체가 한 시점에 하나의 타입에만 속하는 것
- 다중분류 : 한 객체가 한 시점에 여러 타입에 속하는 것
- 객체 지향 프로그래밍 언어는 단일 분류만 지원
- 타입 변경
- 동적 분류 : 객체가 한 집합에서 다른 집합의 원소로 자신이 속하는 타입을 변경할 수 있는 경우
- 정적 분류 : 객체가 자신의 타입을 변경할 수 없는 경우
- 개념적인 관점에서 다중 분류와 동적 분류를 함께 적용하는 것이 실세계 복잡성을 모델링하는데 유용
- 대부분의 언어는 객체 타입 변경이 불가능 => 동적 분류 구현 못함
- 다중분류와 동적분류 관점에서 도메인 모델 초안을 만든 후 단일 분류와 정적 분류 방식으로 객체 범주 조정할 것
- 일반화 특수화
- 일반화는 범주 사이의 차이를 숨기고 범주 간에 공유하는 공통적인 특성을 강조
- 일반화의 역을 특수화
- 타입
- 서브타입
- 슈퍼타입
- is-a 관계
- 일반화 관계
- 서브타입이 슈퍼타입의 부분집합
- 상속
- 구조적인 순응 : 서브타입은 슈퍼타입이 가지고 있는 속성과 연관관계 면에서 일치해야함
- 행위적인 순응 : 서브타입은 슈퍼타입을 행위적으로 대체 가능
- 리스코프 치환 원칙
- 사용
- 서브타이핑 : 서브클래스가 슈퍼클래스를 대체할 수 있는 경우
- 인터페이스 상속
- 서브클래싱 : 서브클래스가 슈퍼클래스를 대체할 수 없는 경우
- 서브클래싱을 구현 상속
- 서브타이핑은 구조적, 행위적 순응 관계를 의미하며 대체가능성을 내포하여 되도록 서브타이핑의 대체 가능성을 준수하도록 사용
- 서브타이핑 : 서브클래스가 슈퍼클래스를 대체할 수 있는 경우
- 위임 : 여러 클래스로 구성된 상속 계층에서 수신된 메시지를 이해하는 방법
- 수신된 메시지를 이해할 수 없을 때 부모 클래스로 위임
- 집합과 분해
- 집합은 부분과 관련된 세부사항을 숨기고 부분을 사용해서 전체를 형성하는 과정
- 집합의 반대 과정은 전체를 부분으로 분리하는 분해 과정
- 집합은 전체의 내부로 불필요한 세부사항을 감춰주기 때문에 캡슐화 메커니즘임
- 합성 관계
- 부분을 전체 안에 캡슐화함으로써 인지 과부하를 방지
- 포함하는 객체가 제거될 때 내부에 포함된 객체도 함께 제거됨(주문-주문항목)
- 연관 관계
- 단순한 연결 관계
- 연결된 두 객체가 독립적으로 제거됨(주문항목 - 상품)
- 패키지 또는 모듈
- 관련된 클래스 집합을 하나의 논리적인 단위로 묶는 구성요소
728x90'Book > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 기능과 구조의 통합 (0) 2023.03.14 [객체지향의 사실과 오해] 책임의 자율성을 통한 협력의 품질 (1) 2023.03.14 [객체지향의 사실과 오해] 역할, 책임, 협력을 통한 객체지향 설계 이해 (0) 2023.03.13 [객체지향의 사실과 오해] 추상화의 2가지 차원을 바탕으로 이해한 타입(type) (1) 2023.03.10 [객체지향의 사실과 오해] 객체에 대해서 (0) 2023.03.09 - 개념 관점(Conceptual Perspective)