추상화 기법
- 도메인에 존재하는 개념들을 구조화하고 단순화
- 특성을 공유하는 객체들을 동일한 타입으로 분류하는 것이 한 예이다.
- 추상화 기법은 "복잡성을 낮추기 위해 사물의 특정한 측면을 감춘다"
1. 분류와 인스턴스화
개념과 범주
- 객체를 분류하고 범주로 묶는 것은 객체들의 특정 집합에 공통의 개념을 적용하는 것
- 객체에 개념을 적용하는 과정을 "분류"라고 함.
- 수많은 개별적인 현상들을 객체라고하고 하나의 개념을 타입이라고 함
정리하면)
- 개념 = 타입
- 객체 = 타입의 인스턴스
타입
- 심볼(Symbol): 타입을 가리키는 간략한 이름이나 명칭
- 내연(Intension): 타입의 완전한 정의. 내연의 의미를 통해 객체가 타입에 속하는지 알 수 있음
- 외연(Extension): 타입에 속하는 모든 객체들의 집합
외연과 집합
- 객체들은 동시에 서로 다른 집합에 포함될 수 있다.
- 단일분류: 한 객체가 한 시점에 하나의 타입에만 속하는 것
- 다중분류: 한 객체가 한 시점에 여러 타입에 속하는 것 . 특정한 타입을 정의하지 않고도 하나의 객체가 서로 다른 타입의 인스턴스가 되도록 허용함.
- 다중 상속: 하나의 타입이 다수의 슈퍼타입을 가질 수 있도록 허용하지만 타입 정의를 생략할 수는 없음.
- 동적분류와 정적분류: 동적분류를 실제로 구현하기는 쉽지 않다. 단일 분류와 정적분류로 범주를 재조정하는 것이 낫다.
클래스
타입을 구현하는 용도. 코드를 재사용하는 용도.
2. 일반화와 특수화
범주의 계층
세부적인 범주 > 일반적인 범주
서브타입: 서브타입은 슈퍼타입이 가진 본질적인 속성과 함께 자신만의 추가적인 속성을 가진다.
- 100% 규칙: 슈퍼타입의 정의가 100% 서브타입에 적용돼야 한다.
- Is - A 규칙: 서브타입의 모든 인스턴스는 슈퍼타입의 집합에 포함돼야 한다.
상속
- 일반화의 원칙은 한 타입이 다른 타입의 서브타입이 되기 위해서는 슈퍼타입에 순응해야한다는 점. 대체가능성
- 구조적 순응: 타입의 내연과 관련된 100% 규칙. 속성이 100% 일치해야 함
- 행위적 순응: 리스코프치환 원칙/ 메시지와 관계
- 상속의 또 다른 용도는 코드의 재사용.
- 서브타이핑: 서브클래스가 슈퍼클래스를 대체할 수 있는 경우 -> 유연성을 목표(인터페이스 상속)
- 서브클래싱: 대체할 수 없는 경우 -> 코드의 중복 제거/재사용(구현상속)
3. 집합과 분해
- 집합: 안정적인 형태의 부분으로부터 전체를 구축하는 행위. 반대는 분해.
- 복잡성을 줄일 수 있다. 불필요한 세부 사항을 추상화한다.
- 합성관계: 객체와 객체 사이 전체-부분 관계를 구현하기 위해. 부분을 전체 안에 캡슐화함으로써 과부하 방지. 포함하는 객체가 제거될 때 내부의 객체도 함께 제거된다.
'책, 강의 정리 > 객체지향의 사실과 오해' 카테고리의 다른 글
객체지향의 사실과 오해 - 7장(함께 모으기) (0) | 2019.12.16 |
---|---|
객체지향의 사실과 오해 - 6장(객체지도) (0) | 2019.12.16 |
객체지향의 사실과 오해 - 5장(책임과 메시지) (1) | 2019.12.16 |
객체지향의 사실과 오해 - 4장(역할, 책임, 협력) (1) | 2019.12.16 |
객체지향의 사실과 오해 - 3장(타입과 추상화) (1) | 2019.12.16 |