28
팩팩팩 팩팩팩 팩팩팩 팩팩 팩팩팩 팩팩 By GYG

팩토리 메소드 패턴과 추상 팩토리 패턴

Embed Size (px)

DESCRIPTION

팩토리 메소드 패턴과 추상 팩토리 패턴

Citation preview

Page 1: 팩토리 메소드 패턴과 추상 팩토리 패턴

팩토리 메소드 패턴과 추상 팩토리 패턴

By GYG

Page 2: 팩토리 메소드 패턴과 추상 팩토리 패턴

팩토리 메소드 패턴을 더 쉽게 이해하기 위해 , 템플릿 메소드 패턴을 집고 넘어가자 .

팩토리 메소드 패턴

Page 3: 팩토리 메소드 패턴과 추상 팩토리 패턴

템플릿 메소드 패턴

추상 classVirtual bool Update();Virutal void Render();

구체 classAVirtual bool Update();

Virutal void Render();

구체 classBVirtual bool Update();

Virutal void Render();

구체 classCVirtual bool Update();Virutal void Render();

Page 4: 팩토리 메소드 패턴과 추상 팩토리 패턴

앞장의 그림으로 이해가 되었다면 , 팩토리 메소스 패턴으로 gogo~ 아니라면 다음장으로 gogo~

템플릿 메소드 패턴

Page 5: 팩토리 메소드 패턴과 추상 팩토리 패턴

상위 클래스쪽에 템플릿 함수 ( virtual 함수 ) 가 정의되어 있고 , 하위 클래스는 실제로 구현하는 방식 .

( 플머라면 다 아실 것 같지만 이해를 돕기 위해 … )

템플릿 메소드 패턴

Page 6: 팩토리 메소드 패턴과 추상 팩토리 패턴

추상 class

구체 class

템플릿 메소드 패턴

Page 7: 팩토리 메소드 패턴과 추상 팩토리 패턴

같은 필기 도구들이지만 , 사용할 때 그려지는 방식은 제각각 ..

템플릿 메소드 패턴

Page 8: 팩토리 메소드 패턴과 추상 팩토리 패턴

그리다

얇게 그리다 부드럽게 그리다 흐리게 그리다 .

템플릿 메소드 패턴

Page 9: 팩토리 메소드 패턴과 추상 팩토리 패턴

그리다라는 골격은 같지만 , 실제 그려지는 방식이 다름 .

템플릿 메소드 패턴

Page 10: 팩토리 메소드 패턴과 추상 팩토리 패턴

왜 사용함… ?

템플릿 메소드 패턴

Page 11: 팩토리 메소드 패턴과 추상 팩토리 패턴

상위 클래스에서 처리의 흐름을 잘 !! 제어한다면 , 확장성 있는 코드 구현이 가능하기 때문에 사용 ! 개이득 !!( 사실… 잘 제어하게 만드는 것이 제일 힘듦… )

템플릿 메소드 패턴

Page 12: 팩토리 메소드 패턴과 추상 팩토리 패턴

잘 제어하기 위한 고려 사항

1. 맴버 함수들의 접근 범위 지정에 대한 명확화 . 2. 가상 함수와 , 일반함수의 선언에 대해 칼 같은

결정 . 3. 재정의 함수 오용 막음 ( 2 번과 내용 중복… )

템플릿 메서드 패턴

Page 13: 팩토리 메소드 패턴과 추상 팩토리 패턴

템플릿 메소드 팬턴에 대해 알았으니 , 팩토리 메소드 패턴에 대해 알아보자 !!

팩토리 메소드 패턴

Page 14: 팩토리 메소드 패턴과 추상 팩토리 패턴

하위 클래스에서 객체를 생성하는데 , 상위 클래스에서는 그 객체에 대해 몰라도 된다는 것 !!

팩토리 메소드 패턴

Page 15: 팩토리 메소드 패턴과 추상 팩토리 패턴

피자 가게

뉴욕 피자 가게 , 판교 피자 가게 , 진월동 피자 가게 같은 피자 가게이지만 , 생산하는 메뉴가 제 각각 !!

팩토리 메소드 패턴

Page 16: 팩토리 메소드 패턴과 추상 팩토리 패턴

Class 피자 가게Pizza* PizzaFactory( pizzaType tye)

Class 뉴욕 피자 가게Pizza* PizzaFactory( pizzaType tye)

Class 판교 피자 가게Pizza* PizzaFactory( pizzaType

tye)

Class 진월동 피자 가게Pizza* PizzaFactory( pizzaType tye)

팩토리 메소드 패턴

Page 17: 팩토리 메소드 패턴과 추상 팩토리 패턴

피자 가게?? 피자 생산

뉴욕 피자 가게뉴욕 스타일 페페로니 피자

판교 피자 가게야식 피자

진월동 피자 가게우리 쌀 피자

팩토리 메소드 패턴

Page 18: 팩토리 메소드 패턴과 추상 팩토리 패턴

상위 클래스 피자 가게에서 하위 클래스들이 무엇을 생산하는지 몰라도 됨 !

팩토리 메소드 패턴

Page 19: 팩토리 메소드 패턴과 추상 팩토리 패턴

의존성에서 개이득 !! 하위 클래스에서 객체 생성 함수를 구현 하여 , 상위

클래스와 실제 생성되는 객체와의 의존성은 제거함 !!

팩토리 메소드 패턴

Page 20: 팩토리 메소드 패턴과 추상 팩토리 패턴

좀 더 의존성을 줄이는 방법이 있지만 그것은 나중에… ( 힌트는 피자를 추상 클래스로 하나 만들고 하위 클래스로 구체화 시키면됨 .. )

팩토리 메소드 패턴

Page 21: 팩토리 메소드 패턴과 추상 팩토리 패턴

정리

하위 클래스에서 객체를 생성하는데 , 상위 클래스에서는 그 객체에 대해 몰라도 된다는 것 !!

( 제일 처음 것 복붙 .. 이제 이해 되셔야 됨 ..)

팩토리 메소드 패턴

Page 22: 팩토리 메소드 패턴과 추상 팩토리 패턴

객체가 객체를 생성함 !! 다양한 구성 요소 별로 “객체의 집합”을 생성 해야할

때 유용 !!

추상 팩토리 패턴

Page 23: 팩토리 메소드 패턴과 추상 팩토리 패턴

추상 팩토리 패턴

피자 원료 공장CreateDough()CreateSauce()

뉴욕 피자 원료 공장CreateDough()CreateSauce()

판교 피자 원료 공장CreateDough()CreateSauce()

진월동 피자 원료 공장CreateDough()CreateSauce()

Page 24: 팩토리 메소드 패턴과 추상 팩토리 패턴

각각의 하위 원료 공장에서 Dough 와 Sauce 를 생성하게 만듦 .

( 뉴욕 , 판교 , 진월동이 각각의 재료를 생성하고 이것이 한 묶음이 됨 )

추상 팩토리 패턴

Page 25: 팩토리 메소드 패턴과 추상 팩토리 패턴

탬플릿 메소드 패턴을 사용했다는 점에서는 같다 ! 하지만 , 팩토리 메소드 패턴은 클래스를 이용하여 객체를 만들고 , 추상 팩토리 패턴은 객체 구성을 통해 객체를 만든다 .

팩토리 메소드 패턴과 추상 팩토리 패턴의 차이

Page 26: 팩토리 메소드 패턴과 추상 팩토리 패턴

팩토리 메소드 패턴 pizza* PizzaFactory( pizzaType type ){ switch(type) { case 진월 : return 진월피자 ; ….

} }

=> 타입을 통해 객체 하나를 만듦 .

팩토리 메소드 패턴

Page 27: 팩토리 메소드 패턴과 추상 팩토리 패턴

Class 진월원료공장{ CreateDough(); CreateSauce(); …..}=> 먼저 객체를 생성하고 해당 객체로 각각의 원료를

생산하여 , 자신을 점점 구체화 시킴 .

추상 팩토리 패턴

Page 28: 팩토리 메소드 패턴과 추상 팩토리 패턴

탬플릿 메소드 패턴을 사용했다는 점에서는 같다 ! 하지만 , 팩토리 메소드 패턴은 클래스를 이용하여 객체를 한번에 만들고 , 추상 팩토리 패턴 객체를 생성하고 , 객체 구성을 통해 자신을 점점 구체화 (?)시킨다 .

정리