부록.추상화 기법
추상화 기법
추상화는 도메인의 복잡성을 단순화하고 직관적인 멘탈 모델을 만드는 데 사용할 수 있는 가장 기본적인 인지 수단
추상화 기법
분류와 인스턴스화 :
분류
는 객체의 구체적인 세부 사항을 숨기고 인스턴스 간에 공유하는 공통적인 특성을 기반으로 범주를 형성하는 과정분류의 역은 범주로부터 객체를 생성하는
인스턴스화 과정
일반화와 특수화 :
일반화
는 범주 사이의 차이를 숨기고 범주 간에 공유하는 공통적인 특성을 강조일반화의 역을
특수화
집합과 분해 :
집합
은 부분과 관련된 세부 사항을 숨기고 부분을 사용해서 전체를 형성하는 과정집합의 반대 과정은 전체를 부분으로 분리하는
분해 과정
분류와 인스턴스화
개념과 범주
객체를 분류하고 범주로 묶는 것은 객체들의 특정 집합에 공통의 개념을 적용하는 것을 의미
개념
이란 속성과 행위가 유사한 객체에 공통적으로 적용되는 관념이나 아이디어세상에 존재하는 객체에 개념을 적용하는 과정을
분류
수많은 개별적인 현상들을
객체
라고 하고, 하나의 개념을타입
이라고 한다.분류의 역은 타입에 해당하는 객체를 생성하는 과정
인스턴스화
or예시
분류
는객체를 타입과 연관시키는 것
객체들을 동일한 타입 또는 범주로 묶는 과정
객체와 타입 간의 관계를 나타낸 것.
타입
객체를 타입에 따라 분류하기 위해서는 객체가 타입에 속하는지 여부를 확인할 수 있어야 한다.
타입을 객체의 분류 장치로 적용하기 위한 정의
심볼
: 타입을 가리키는 간략한 이름이나 명칭내연
: 타입의 완전한 정의, 내연의 의미를 이용해 객체가 타입에 속하는지 여부를 확인외연
: 타입에 속하는 모든 객체들의 집합
외연과 집합
단일 분류 : 한 객체가 한 시점에 하나의 타입에만 속하는 것
다중 분류 : 한 객체가 한 시점에 여러 타입에 속할 경우
동적 분류 : 객체가 한 집합에서 다른 집합의 원소로 자신이 속하는 타입을 변경할 수 있을 경우
정적 분류 : 객체가 자신의 타입을 변경할 수 없는 경우
다중 분류와 정적 분류 방식으로 객체들의 범주를 재조정하는 편이 분석과 구현 간의 차이를 메울 수 있는 가장 현실적인 방법 단순함을 위해서는 항상 다중 분류와 동적 분류보다는 단일 분류와 정적 분류를 선택하는 것이 현명
클래스
일반화와 특수화
범주의 계층
계층의 상위에 위치한 범주를 계층의 하위에 위치한 범주의
일반화
라고 하고,계층의 하위에 위치한 범주는 계층의 상위에 위치한 범주의
특수화
라고 한다.
서브타입
어떤 타입이 다른 타입보다 일반적이라면
슈퍼타입
어떤 타입이 다른 타입보다 좀 더 특수하다면
서브타입
슈퍼 타입은 서브타입의
일반화
이고, 서브타입은 슈퍼타입의특수화
100% 규칙
: 슈퍼타입의 정의가 100% 서브타입에 적용돼야 한다.서브타입은 속성과 연관관계 면에서 슈퍼타입과 100% 일치
is-a 규칙
: 서브타입의 모든 인스턴스는 슈퍼타입 집합에 포함돼야 한다.is-a-kind-of
: 서브타입이 슈퍼타입 정의를 확장하는 경우
상속
일반화의 원칙은 한 타입이 다른 타입의 서브타입이 되기 위해서는 슈퍼타입에 순응해야 한다
구조적인 순응 : 타입의 내연과 관련된 100% 규칙을 의미한다.
행위적인 순응 : 타입의 행위에 관한 것. 서브타입은 슈퍼타입의 행위적으로 대체 가능해야 한다.
상속의 용도
서브타이핑 : 서브클래스가 슈퍼클래스를 대체할 수 있는 경우 (유연성이 목표)
인터페이스 상속(Interface inheritance)이라고 불림
특정 기대 집합에 대한 서브타입과 슈퍼타입 간의 구조적, 또는 행위적 순응 관계
대체 가능성을 내포
서브클래싱 : 서브클래스가 슈퍼클래스를 대체할 수 없는 경우 (코드 중복 제거와 재사용 목적)
구현 상속(Implementation inheritance)이라고 불림
서브클래스가 슈퍼클래스를 대체할 수 없고 단지 코드만 공유하고 있다면 서브클래싱
집합과 분해
계층적인 복잡성
집합
: 안정적인 형태의 부분으로부터 전체를 구축하는 행위불필요한 세부 사항을 추상화
분해
: 전체를 부분으로 분할하는 행위
합성 관계
객체와 객체 사이의 전체-부분 관계를 구현하기 위해서는 합성 관계를 사용
일반적으로
합성 관계
로 연결된 객체는 포함하는 객체가 제거될 때 내부에 포함된 객체도 함께 제거연관 관계
로 연결된 두 객체는 생명주기와 관련된 어떤 제약도 부과하지 않는다.합성 관계는 생명주기 측면에서 연관 관계보다 더 강하게 객체들을 결합한다.
패키지
소프트웨어의 전체적인 구조를 표현하기 위해 관련된 클래스 집합을 하나의 논리적인 단위로 묶는 구성 요소를
package
ormodule
시스템의 전체적인 구조를 이해하기 위해 한 번에 고려해야 하는 요소의 수를 줄일 수 있음
개별 클래스가 아닌 클래스의 집합을 캡슐화함으로써 전체적인 복잡도를 낮출 수 있음
Last updated