Upload
geniusyg
View
397
Download
1
Embed Size (px)
DESCRIPTION
팩토리 메소드 패턴과 추상 팩토리 패턴
Citation preview
팩토리 메소드 패턴과 추상 팩토리 패턴
By GYG
팩토리 메소드 패턴을 더 쉽게 이해하기 위해 , 템플릿 메소드 패턴을 집고 넘어가자 .
팩토리 메소드 패턴
템플릿 메소드 패턴
추상 classVirtual bool Update();Virutal void Render();
구체 classAVirtual bool Update();
Virutal void Render();
구체 classBVirtual bool Update();
Virutal void Render();
구체 classCVirtual bool Update();Virutal void Render();
앞장의 그림으로 이해가 되었다면 , 팩토리 메소스 패턴으로 gogo~ 아니라면 다음장으로 gogo~
템플릿 메소드 패턴
상위 클래스쪽에 템플릿 함수 ( virtual 함수 ) 가 정의되어 있고 , 하위 클래스는 실제로 구현하는 방식 .
( 플머라면 다 아실 것 같지만 이해를 돕기 위해 … )
템플릿 메소드 패턴
추상 class
구체 class
템플릿 메소드 패턴
같은 필기 도구들이지만 , 사용할 때 그려지는 방식은 제각각 ..
템플릿 메소드 패턴
그리다
얇게 그리다 부드럽게 그리다 흐리게 그리다 .
템플릿 메소드 패턴
그리다라는 골격은 같지만 , 실제 그려지는 방식이 다름 .
템플릿 메소드 패턴
왜 사용함… ?
템플릿 메소드 패턴
상위 클래스에서 처리의 흐름을 잘 !! 제어한다면 , 확장성 있는 코드 구현이 가능하기 때문에 사용 ! 개이득 !!( 사실… 잘 제어하게 만드는 것이 제일 힘듦… )
템플릿 메소드 패턴
잘 제어하기 위한 고려 사항
1. 맴버 함수들의 접근 범위 지정에 대한 명확화 . 2. 가상 함수와 , 일반함수의 선언에 대해 칼 같은
결정 . 3. 재정의 함수 오용 막음 ( 2 번과 내용 중복… )
템플릿 메서드 패턴
템플릿 메소드 팬턴에 대해 알았으니 , 팩토리 메소드 패턴에 대해 알아보자 !!
팩토리 메소드 패턴
하위 클래스에서 객체를 생성하는데 , 상위 클래스에서는 그 객체에 대해 몰라도 된다는 것 !!
팩토리 메소드 패턴
피자 가게
뉴욕 피자 가게 , 판교 피자 가게 , 진월동 피자 가게 같은 피자 가게이지만 , 생산하는 메뉴가 제 각각 !!
팩토리 메소드 패턴
Class 피자 가게Pizza* PizzaFactory( pizzaType tye)
Class 뉴욕 피자 가게Pizza* PizzaFactory( pizzaType tye)
Class 판교 피자 가게Pizza* PizzaFactory( pizzaType
tye)
Class 진월동 피자 가게Pizza* PizzaFactory( pizzaType tye)
팩토리 메소드 패턴
피자 가게?? 피자 생산
뉴욕 피자 가게뉴욕 스타일 페페로니 피자
판교 피자 가게야식 피자
진월동 피자 가게우리 쌀 피자
팩토리 메소드 패턴
상위 클래스 피자 가게에서 하위 클래스들이 무엇을 생산하는지 몰라도 됨 !
팩토리 메소드 패턴
의존성에서 개이득 !! 하위 클래스에서 객체 생성 함수를 구현 하여 , 상위
클래스와 실제 생성되는 객체와의 의존성은 제거함 !!
팩토리 메소드 패턴
좀 더 의존성을 줄이는 방법이 있지만 그것은 나중에… ( 힌트는 피자를 추상 클래스로 하나 만들고 하위 클래스로 구체화 시키면됨 .. )
팩토리 메소드 패턴
정리
하위 클래스에서 객체를 생성하는데 , 상위 클래스에서는 그 객체에 대해 몰라도 된다는 것 !!
( 제일 처음 것 복붙 .. 이제 이해 되셔야 됨 ..)
팩토리 메소드 패턴
객체가 객체를 생성함 !! 다양한 구성 요소 별로 “객체의 집합”을 생성 해야할
때 유용 !!
추상 팩토리 패턴
추상 팩토리 패턴
피자 원료 공장CreateDough()CreateSauce()
뉴욕 피자 원료 공장CreateDough()CreateSauce()
판교 피자 원료 공장CreateDough()CreateSauce()
진월동 피자 원료 공장CreateDough()CreateSauce()
각각의 하위 원료 공장에서 Dough 와 Sauce 를 생성하게 만듦 .
( 뉴욕 , 판교 , 진월동이 각각의 재료를 생성하고 이것이 한 묶음이 됨 )
추상 팩토리 패턴
탬플릿 메소드 패턴을 사용했다는 점에서는 같다 ! 하지만 , 팩토리 메소드 패턴은 클래스를 이용하여 객체를 만들고 , 추상 팩토리 패턴은 객체 구성을 통해 객체를 만든다 .
팩토리 메소드 패턴과 추상 팩토리 패턴의 차이
팩토리 메소드 패턴 pizza* PizzaFactory( pizzaType type ){ switch(type) { case 진월 : return 진월피자 ; ….
} }
=> 타입을 통해 객체 하나를 만듦 .
팩토리 메소드 패턴
Class 진월원료공장{ CreateDough(); CreateSauce(); …..}=> 먼저 객체를 생성하고 해당 객체로 각각의 원료를
생산하여 , 자신을 점점 구체화 시킴 .
추상 팩토리 패턴
탬플릿 메소드 패턴을 사용했다는 점에서는 같다 ! 하지만 , 팩토리 메소드 패턴은 클래스를 이용하여 객체를 한번에 만들고 , 추상 팩토리 패턴 객체를 생성하고 , 객체 구성을 통해 자신을 점점 구체화 (?)시킨다 .
정리