SlideShare uma empresa Scribd logo
1 de 28
By GYG
 팩토리 메소드 패턴을 더 쉽게 이해하기 위해, 
템플릿 메소드 패턴을 집고 넘어가자.
추상 class 
Virtual bool Update(); 
Virutal void Render(); 
구체 classA 
Virtual bool Update(); 
Virutal void Render(); 
구체 classB 
Virtual bool Update(); 
Virutal void Render(); 
구체 classC 
Virtual 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(); 
….. 
} 
=> 먼저 객체를 생성하고 해당 객체로 각각의 원료 
를 생산하여, 자신을 점점 구체화 시킴.
 탬플릿 메소드 패턴을 사용했다는 점에서는 같다! 
하지만, 팩토리 메소드 패턴은 클래스를 이용하여 
객체를 한번에 만들고, 추상 팩토리 패턴 객체를 
생성하고, 객체 구성을 통해 자신을 점점 구체화(?) 
시킨다.

Mais conteúdo relacionado

Mais procurados

Javascript 박재은
Javascript 박재은Javascript 박재은
Javascript 박재은재은 박
 
c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료Mungyu Choi
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지Dong Chan Shin
 
7주 JavaScript Part1
7주 JavaScript Part17주 JavaScript Part1
7주 JavaScript Part1지수 윤
 
상속과 다형성
상속과 다형성상속과 다형성
상속과 다형성. Ruvendix
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법YoungSu Son
 
Windows Debugging Technique #1
Windows Debugging Technique #1Windows Debugging Technique #1
Windows Debugging Technique #1Wooseok Seo
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스재정 이
 
M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
Factory method
Factory methodFactory method
Factory methodcancan21st
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2Wooseok Seo
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정Bonex Gu
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 

Mais procurados (17)

Javascript 박재은
Javascript 박재은Javascript 박재은
Javascript 박재은
 
c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
 
예외 처리
예외 처리예외 처리
예외 처리
 
7주 JavaScript Part1
7주 JavaScript Part17주 JavaScript Part1
7주 JavaScript Part1
 
상속과 다형성
상속과 다형성상속과 다형성
상속과 다형성
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법
 
전처리기
전처리기전처리기
전처리기
 
Windows Debugging Technique #1
Windows Debugging Technique #1Windows Debugging Technique #1
Windows Debugging Technique #1
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
 
M5 6 1
M5 6 1M5 6 1
M5 6 1
 
Factory method
Factory methodFactory method
Factory method
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
Prettier 소개
Prettier 소개Prettier 소개
Prettier 소개
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 

Destaque

게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴예림 임
 
디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴SeongHyun Ahn
 
Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123dragor0123
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
디자인패턴
디자인패턴디자인패턴
디자인패턴진화 손
 
Observer pattern dragor
Observer pattern dragorObserver pattern dragor
Observer pattern dragordragor0123
 
안드로이드 MediaPlayer & VideoView
안드로이드 MediaPlayer & VideoView안드로이드 MediaPlayer & VideoView
안드로이드 MediaPlayer & VideoViewEunjoo Im
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2Daniel Lim
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장SukYun Yoon
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자Taeyeop Kim
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것흥배 최
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)KH Park (박경훈)
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 

Destaque (19)

Caption4
Caption4Caption4
Caption4
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴
 
Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
Día #4
Día #4Día #4
Día #4
 
디자인패턴
디자인패턴디자인패턴
디자인패턴
 
Observer pattern dragor
Observer pattern dragorObserver pattern dragor
Observer pattern dragor
 
TBB 소개
TBB 소개TBB 소개
TBB 소개
 
안드로이드 MediaPlayer & VideoView
안드로이드 MediaPlayer & VideoView안드로이드 MediaPlayer & VideoView
안드로이드 MediaPlayer & VideoView
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 

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

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