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

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

description

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

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

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: 팩토리 메소드 패턴과 추상 팩토리 패턴

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

정리