디자인 패턴의 목적 : 최대로 재사용 가능하게
객체 지향 프로그래밍
분석, 설계하고 구현하고 많은 방법 중의 한가지 방법
절차적 추상화
데이터 추상화
Encalsulation(은닉화)
상속성
※ 1. 인터페이스 상속 = 타입 상속(정의하기 위해 사용)
※ 2. 구현상속
다형성
저수준 객체
Entity : 상태+행동
고수준 객체
state + behavior + Identity
responsibility : thing + concept
클래스 : 비슷한 구조와 행위를 가진 객체의 그룹
인터페이스
Object의 타입(Object의 Signature) : 인터페이스만 얘기하면 된다.
서비스와 responsibility(반드시 구현할 책임)의 모든 signature의 집합.
오브젝트 타입
특정 인터페이스를 표시하는 데 사용하는 이름.
오브젝트 클래스
오브젝트 구현을 정의(내부 데이터와 표현)
객체가 수행하는 연산을 정의
서브클래싱과 서브타이핑
클래스 상속과 인터페이스 상속의 차이
서브클래싱 : 구현과 관련됨.
서브타이핑 : 인터페이스와 관련됨. (예: IUnknown)
부모쪽은 super(typing/classing), 자식쪽은 sub(typing/classing)
타이핑은 집합의 포함처럼, 클래스는 포인터로 가리키게 표현.
public 상속 : subclassing + subtyping
private 상속 : subclassing
자바에서는 subclassing과 subtyping을 구별 못한다.
객체 지향 디자인 원리1
Abstract class <-> Concrete class
구현이 아닌 인터페이스 프로그래밍을 해야 한다. -> virtual 선언을 통해 자식을 제어할 수 있음.
추상 클래스를 사용한다.
모듈간의 의존성을 줄인다.
※ Object만 바꾸고 타입은 바꾸지 않는다.
※ 추상클래스의 메소드를 통해 제어가 가능.
※ 모두 Draw 인터페이스만 호출하면 된다. -> 객체가 책임진다.
클라이언트는 객체를 어떻게 구현했는 지 알 필요가 없다.
객체 지향 디자인 원리 2
Favor object composition over class inheritance.
클래스 상속 보다는 객체 합성이 더 낫다. (상속하지 않고 포함해서 사용.)
※ GoF때는 상속을 많이 쓰던 때였다.
Whitebox vs Blackbox
Whitebox : 서로가 소스를 다 아는 상태. 서브클래싱에 의한 재사용.
Blackbox : Input만 넣고 Output만 검사. 객체 어셈블리나 합성을 통한 재사용
whitebox
클래스 상속은 컴파일 시에 정의된다.
단점
실행시 바꾸지 못함.
악명높은 깨지기 쉬운 기본 클래스(FBC) 문제
- 대부분은 접근 불능.
깨지기 쉬운 기본 클래스(FBC) 문제
자바 : 실행시 구현 형성. FBC 문제를 어느 정도 피할 수 있음.
C++ : 컴파일시 구현 형성. 기본 클래스가 바뀌면 다시 컴파일 해야 함. (주소 바인딩이 결정되어 있기 때문)
blackbox 재사용
객체 합성은 실행시 동적으로 정의된다.
장점 : 클래스 계층구조가 작다.
단점 : 비효율성, 코드를 이해하기 어렵다.
'컴퓨터 공부 > 디자인 패턴' 카테고리의 다른 글
[7월 7일 3교시] Singleton, prototype 패턴 (0) | 2009.07.07 |
---|---|
[7월 7일 2교시] Templete Method 패턴 (0) | 2009.07.07 |
[7월 7일 1교시] Adapter 패턴, Template Method (0) | 2009.07.07 |
[7월 6일 3교시] Iterator 패턴, (0) | 2009.07.06 |
[7월 6일 2교시] 디자인 패턴의 동기(Motivation) (0) | 2009.07.06 |