본문 바로가기

책, 강의 정리/객체지향의 사실과 오해

객체지향의 사실과 오해 - 부록

 

추상화 기법

- 도메인에 존재하는 개념들을 구조화하고 단순화

- 특성을 공유하는 객체들을 동일한 타입으로 분류하는 것이 한 예이다.

- 추상화 기법은 "복잡성을 낮추기 위해 사물의 특정한 측면을 감춘다"

 

1. 분류와 인스턴스화

개념과 범주

- 객체를 분류하고 범주로 묶는 것은 객체들의 특정 집합에 공통의 개념을 적용하는 것

- 객체에 개념을 적용하는 과정을 "분류"라고 함.

- 수많은 개별적인 현상들을 객체라고하고 하나의 개념을 타입이라고 함

정리하면)

- 개념 = 타입

- 객체 = 타입의 인스턴스

 

타입

- 심볼(Symbol): 타입을 가리키는 간략한 이름이나 명칭

- 내연(Intension): 타입의 완전한 정의. 내연의 의미를 통해 객체가 타입에 속하는지 알 수 있음

- 외연(Extension): 타입에 속하는 모든 객체들의 집합

 

 

외연과 집합

- 객체들은 동시에 서로 다른 집합에 포함될 수 있다.

- 단일분류: 한 객체가 한 시점에 하나의 타입에만 속하는 것

- 다중분류: 한 객체가 한 시점에 여러 타입에 속하는 것 . 특정한 타입을 정의하지 않고도 하나의 객체가 서로 다른 타입의 인스턴스가 되도록 허용함.

- 다중 상속: 하나의 타입이 다수의 슈퍼타입을 가질 수 있도록 허용하지만 타입 정의를 생략할 수는 없음.

- 동적분류와 정적분류: 동적분류를 실제로 구현하기는 쉽지 않다. 단일 분류와 정적분류로 범주를 재조정하는 것이 낫다.

 

클래스

타입을 구현하는 용도. 코드를 재사용하는 용도. 

 

2. 일반화와 특수화

범주의 계층

세부적인 범주 > 일반적인 범주

서브타입: 서브타입은 슈퍼타입이 가진 본질적인 속성과 함께 자신만의 추가적인 속성을 가진다.

- 100% 규칙: 슈퍼타입의 정의가 100% 서브타입에 적용돼야 한다.

- Is - A 규칙: 서브타입의 모든 인스턴스는 슈퍼타입의 집합에 포함돼야 한다.

상속

- 일반화의 원칙은 한 타입이 다른 타입의 서브타입이 되기 위해서는 슈퍼타입에 순응해야한다는 점. 대체가능성

- 구조적 순응: 타입의 내연과 관련된 100% 규칙. 속성이 100% 일치해야 함

- 행위적 순응: 리스코프치환 원칙/ 메시지와 관계

- 상속의 또 다른 용도는 코드의 재사용.

- 서브타이핑: 서브클래스가 슈퍼클래스를 대체할 수 있는 경우 -> 유연성을 목표(인터페이스 상속)

- 서브클래싱: 대체할 수 없는 경우 -> 코드의 중복 제거/재사용(구현상속)

 

3. 집합과 분해

- 집합: 안정적인 형태의 부분으로부터 전체를 구축하는 행위. 반대는 분해.

- 복잡성을 줄일 수 있다. 불필요한 세부 사항을 추상화한다.

- 합성관계: 객체와 객체 사이 전체-부분 관계를 구현하기 위해. 부분을 전체 안에 캡슐화함으로써 과부하 방지. 포함하는 객체가 제거될 때 내부의 객체도 함께 제거된다.