컴퓨터 공부/디자인 패턴

[7월 6일 1교시] 디자인 패턴의 원리

려리군 2009. 7. 6. 10:04

디자인 패턴의 목적 : 최대로 재사용 가능하게


객체 지향 프로그래밍

분석, 설계하고 구현하고 많은 방법 중의 한가지 방법


절차적 추상화

데이터 추상화

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 재사용

객체 합성은 실행시 동적으로 정의된다.

장점 : 클래스 계층구조가 작다.

단점 : 비효율성, 코드를 이해하기 어렵다.