SlideShare uma empresa Scribd logo
1 de 20
Stonze Week1
Abstract Factory Pattern
• Abstract Factory Pattern
제품을 이루고 있는 여러 객체 생성에 유용한 패턴
Ex) 자동차 제품군 : 엔진, 기어, 브레이크, 바퀴 등등으로 구성
어떤 자동차를 만드냐에 따라서 엔진, 기어, 브레이크 또한 각각에 맞는 제품을 필요로 한다
스포츠카에 티코 바퀴 달면 안된다!! 각 제품군(스포츠카, 티코)은
각 제품군에 맞는 객체들을 생성해야한다.
• Abstract Factory Pattern
제품을 이루고 있는 여러 객체 생성에 유용한 패턴
게임을 예로 들어보자.
Ex) 스타크래프트 : 어느 종족이든 본진과 일꾼이 게임시작 할 때 생성해야 한다.
저그로 종족 선택했는데 해처리랑 SCV가 나온면 안된다.
즉 저그로 종족 선택을 했으면 반드시 해처리와 드론이 세트로 생성되어야 한다.
• Abstract Factory Pattern
그렇다면 종족이 결정되었을 때마다 어떻게 그 종족에 맞는 본진과 일꾼들을 시작할 때 생
성하도록 할 수 있을까? 즉, 종족이 결정되면 그에 맞는 본진과 일꾼들을 첫 시작시에 생성
하도록 보장할 수 있을 것인가?
• 문제 해결 사항
- 게임을 시작한다
- 종족을 선택한다.
- 종족에 맞는 본진을 가진다(저그: 해처리, 테란 : 커맨드센터, 프로토스 : 넥서스)
- 각 종족은 자원을 캘 일꾼을 가진다(저그 : 드론, 테란 : SCV , 토스 : 프로브)
- 게임 시작과 함께 각 종족에 맞는 본진 + 일꾼을 셋트로 생성해야 한다.
enum 및 Class 정의
• 직접 타입 조건 체크 사용하여 객체생성
• 직접 타입 조건 체크 사용하여 객체생성 – 그림으로
테란 제품군 생성 토스 제품군 생성 저그 제품군 생성
본진, 일꾼을 생성하는 각각의 코드가 존재한다. 각각의 코드에서 해당 객체 직접 생성
• 직접 타입 조건 체크 사용하여 객체생성
<장점>
- 매우 직관적이고, 쉽다.
<단점>
- 직접 생성하는 코드이므로 코드의 추가, 수정, 변경, 삭제 등이 발생시 직접 해당 구현 부
분을 찾아서 + 고쳐야 한다.
- Ex) 제 4의 종족이 추가된다면 각각의 본진과 일꾼 생성하는 코드를 찾고 + 추가 해야 한다.
- 직접 코드로 제어하기 때문에 해당 객체의 생성이 필요한 곳에서 중복 코드가 발생한다.
- Ex) melee, free for all, team 의 모드에서 각각의 코드가 모두 중복해서 필요하다
- 실수를 유발하기 쉽다.
• 객체 생성 전담 클래스 활용
- Simple Factory라고도 함(패턴이라고 일컫지는 않음)
- 해당 클래스에서 객체생성을 전담함
• 객체 생성 전담 클래스 활용
<장점>
- 하드코딩 된 객체생성 코드가 여기저기에 중복 사용되고 있는 문제점을 해결
- 변경될 가능성이 많은 부분을 한곳으로 모아서 유지 보수 및 변경에 유연하게 대처
<단점>
- 여전히 타입에 따른 조건 체크를 이용하는 코드가 존재함.
- 제4의 종족이 추가된다면 역시 해당 코드의 타입 조건 체크 코드를 각각 추가 해야함.
• 객체 생성 전담 클래스 활용 – 그림으로
테란 제품군 생성 토스 제품군 생성 저그 제품군 생성
본진, 일꾼을 생성하는 객체생성 클래스가 존재한다. 해당 클래스에서 객체 생성관리.
• Abstrac Factory Pattern 활용
- 제품군을 구성하는 클래스의 객체를 생성하는 클래스
- 새로운 제품군을 추가하는 것이 쉽도록 상속을 도입
- 구체적인 제품군별 객체를 생성하는 구현 클래스 존재
- 구현 클래스는 상위의 Abstract Base Class를 상속받아 구현
- 게임 스타트시 제품군을 표현하는 최상위클래스(인터페이스 제공)
- 저그로 스타트시 알맞은 제품을 생성하는 제품군 클래스
- 테란으로 스타트시 알맞은 제품을 생성하는 제품군 클래스
- 프로토스로 스타트시 알맞은 제품을 생성하는 제품군 클래스
- 각 종족별 제품군 클래스는 최상위 클래스를 상속받아 구체적인 객체 생성
• Abstrac Factory Pattern 활용
• Abstrac Factory Pattern 활용
각각의 종족별 본진+일꾼을 한 Set으로 만들어 객체 생성
각 종족에 맞는 Factory Class
• Abstrac Factory Pattern 활용 – 그림으로
테란 제품군 생성 토스 제품군 생성 저그 제품군 생성
본진 + 일꾼 세트를 생성하는 Factory 클래스가 존재한다. 해당 클래스에서 자기 자신이 생성하는 객체들 생성
• Abstrac Factory Pattern 활용
<장점>
- 직접 조건 활용이나 객체 전담 클래스에서 필요했던 타입에 다른 조건 체크가 필요 없음
- 직접 조건 활용이나 객체 전담 클래스에서 객체 생성에 수정이 필요하다면 직접 해당 조건에
대해 알맞은 작업내용을 코드로 추가해야 했다. 하지만 Abstract Factory Pattern에서는 해당
객체 생성 수정이 필요한 Factory Class에서만 수정 변경하므로 의존성이 없음
- 어떤 Factory Class를 활용하여 제품군을 생성할 것인지 정해지면 나머지 객체 생성에 있어서
조건 체크가 필요 없음
- 이전 코드에 대한 분석 및 수정이 필요 없이 독립적으로 객체 생성을 가능하게 한다.
<단점>
- 제 4의 종족이 추가된다면 해당 종족에 대한 구현 Factory Class가 추가되어야 함.
- 제5, 6, 7의 종족이 추가된다면 각각 Factory Class를 구현해야 하므로 Factory Class 개수가 많
아짐
- Factory 자체 제품군이 추가된다면 모든 Factory Class를 수정해야 한다.
Ex) 각 종족 시작시 영웅을 한마리씩 준다고 게임 룰이 바뀐다면?
• Abstrac Factory Pattern 활용 – 단점 해결 방안
- 보통 Abstract Factory Pattern을 활용시 객체 생성을 하는 클래스는 고유한 경우가 많다.
직관적으로 커맨드센터 + SCV를 생성하는 제품군 Factory 클래스가 2개이상이어야 할
이유는 없다. 따라서 이런경우 Singleton 패턴을 적용시켜 특정 Factory Class가 비효율적
으로 2개 이상 생성되는 것을 피할 수 있다.
- Abstrac Factory Pattern은 구현 Factory Class가 늘어날 수 있다는 단점이 있다. 이는
Prototype패턴을 활용하여 해결할 수 있다. 하지만 Prototype패턴을 사용하면 Factory
Class에 객체의 인스턴스를 모두 가지고 있어야하는 부담이 따른다. 또한 객체의 인스턴
스를 제대로 정의하지않으면 제품군에 맞는 알맞은 객체 생성을 보장할 수 없다.
- 만약 제품군 자체에 대한 수정변경이 있을경우 각 Factory Class또한 수정 변경을 해주어
야한다. 이를 해결하기위해 다형성 + prototype패턴을 활용한다. 이에 대한 자세한 사항
은 prototype패턴을 공부한 후 다시 정리해보기로 한다.
• Abstract Factory Pattern 활용 – 정리
- 객체의 생성을 독립적으로 만드는데 아주 유리한 패턴
- 여러 제품군이 있다면 특정한 제품군에 알맞은 객체를 생성하도록 보장하길 원할때 유용
함
- 여러 제품군이 있다면 어떤 제품군을 선택할 것인지 직관적이고 명료함
- 제품군 생성에 대한 Abstract Class를 활용하므로, 구체적인 Factory Class의 내부는 몰라
도됨
- 구체적인 객체생성에 대한 캡슐화와 정보은닉
- 항상 Abstract Factory Pattern이 유용한 것은 아니다. 제품군에 대한 객체 생성이 단순명
료하고, 제품군 자체의 수가 적다면 Simple Factory 구현 만으로도 충분할 수 있다. 이것
을 판단할 수 있는 경험과 노하우를 쌓는 것이 중요하다.
End
참고자료 : GOF 디자인패턴, HeadFirstDesignPattern, Wiki

Mais conteúdo relacionado

Destaque

Mitos y ciencia: Licantropía clínica y hombres lobo
Mitos y ciencia: Licantropía clínica y hombres loboMitos y ciencia: Licantropía clínica y hombres lobo
Mitos y ciencia: Licantropía clínica y hombres loboJuan de Dios Díaz Rosales
 
Managing groups tutorial (diigo)
Managing groups tutorial (diigo)Managing groups tutorial (diigo)
Managing groups tutorial (diigo)Paul L
 
In the heart of gotham city
In the heart of gotham cityIn the heart of gotham city
In the heart of gotham city121883
 
Drugs used in lactation and pregnacy
Drugs used in lactation and pregnacyDrugs used in lactation and pregnacy
Drugs used in lactation and pregnacyWezi Kaonga
 
Abstract factory pattern
Abstract factory patternAbstract factory pattern
Abstract factory patternminjin00
 
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...gper2014
 
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...gper2014
 
Drugs used in pregnancy and lactation
Drugs used in pregnancy and lactationDrugs used in pregnancy and lactation
Drugs used in pregnancy and lactationKoppala RVS Chaitanya
 

Destaque (15)

Mitos y ciencia: Licantropía clínica y hombres lobo
Mitos y ciencia: Licantropía clínica y hombres loboMitos y ciencia: Licantropía clínica y hombres lobo
Mitos y ciencia: Licantropía clínica y hombres lobo
 
El aguila
El aguilaEl aguila
El aguila
 
Www.deprojectinrichter.com
Www.deprojectinrichter.comWww.deprojectinrichter.com
Www.deprojectinrichter.com
 
Ch03 6
Ch03 6Ch03 6
Ch03 6
 
Managing groups tutorial (diigo)
Managing groups tutorial (diigo)Managing groups tutorial (diigo)
Managing groups tutorial (diigo)
 
Ch03 5
Ch03 5Ch03 5
Ch03 5
 
La circulación
La circulaciónLa circulación
La circulación
 
In the heart of gotham city
In the heart of gotham cityIn the heart of gotham city
In the heart of gotham city
 
Corection of sph ametropia
Corection of sph ametropiaCorection of sph ametropia
Corection of sph ametropia
 
Drugs used in lactation and pregnacy
Drugs used in lactation and pregnacyDrugs used in lactation and pregnacy
Drugs used in lactation and pregnacy
 
Eye assessment
Eye assessmentEye assessment
Eye assessment
 
Abstract factory pattern
Abstract factory patternAbstract factory pattern
Abstract factory pattern
 
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
 
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
Να μη με πούνε γάιδαρο, αδιάφορο ή όνο , προσέχω απ' τα σκουπίδια μου κι εγώ ...
 
Drugs used in pregnancy and lactation
Drugs used in pregnancy and lactationDrugs used in pregnancy and lactation
Drugs used in pregnancy and lactation
 

Semelhante a Stonze study week1

HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
Effective java
Effective javaEffective java
Effective javaHaeil Yi
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2성연 김
 
Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Mark Lee
 
테크데이 발표자료.pptx.pdf
테크데이 발표자료.pptx.pdf테크데이 발표자료.pptx.pdf
테크데이 발표자료.pptx.pdfJihoon Kim
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴Jaeho Seok
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2Daniel Lim
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3Daniel Lim
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13Shin heemin
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준HoJun Sung
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1정환 임
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
디자인패턴
디자인패턴디자인패턴
디자인패턴진화 손
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummarySeungYeonChoi10
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8hyun soomyung
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 

Semelhante a Stonze study week1 (20)

HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Effective java
Effective javaEffective java
Effective java
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)
 
EC 789
EC 789EC 789
EC 789
 
테크데이 발표자료.pptx.pdf
테크데이 발표자료.pptx.pdf테크데이 발표자료.pptx.pdf
테크데이 발표자료.pptx.pdf
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
디자인패턴
디자인패턴디자인패턴
디자인패턴
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 

Mais de Injae Lee

More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차Injae Lee
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptInjae Lee
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2Injae Lee
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2Injae Lee
 
갓오브워 어센션 포스트모템
갓오브워 어센션  포스트모템갓오브워 어센션  포스트모템
갓오브워 어센션 포스트모템Injae Lee
 

Mais de Injae Lee (9)

More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4ppt
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
갓오브워 어센션 포스트모템
갓오브워 어센션  포스트모템갓오브워 어센션  포스트모템
갓오브워 어센션 포스트모템
 

Stonze study week1

  • 2. • Abstract Factory Pattern 제품을 이루고 있는 여러 객체 생성에 유용한 패턴 Ex) 자동차 제품군 : 엔진, 기어, 브레이크, 바퀴 등등으로 구성 어떤 자동차를 만드냐에 따라서 엔진, 기어, 브레이크 또한 각각에 맞는 제품을 필요로 한다 스포츠카에 티코 바퀴 달면 안된다!! 각 제품군(스포츠카, 티코)은 각 제품군에 맞는 객체들을 생성해야한다.
  • 3. • Abstract Factory Pattern 제품을 이루고 있는 여러 객체 생성에 유용한 패턴 게임을 예로 들어보자. Ex) 스타크래프트 : 어느 종족이든 본진과 일꾼이 게임시작 할 때 생성해야 한다. 저그로 종족 선택했는데 해처리랑 SCV가 나온면 안된다. 즉 저그로 종족 선택을 했으면 반드시 해처리와 드론이 세트로 생성되어야 한다.
  • 4. • Abstract Factory Pattern 그렇다면 종족이 결정되었을 때마다 어떻게 그 종족에 맞는 본진과 일꾼들을 시작할 때 생 성하도록 할 수 있을까? 즉, 종족이 결정되면 그에 맞는 본진과 일꾼들을 첫 시작시에 생성 하도록 보장할 수 있을 것인가?
  • 5. • 문제 해결 사항 - 게임을 시작한다 - 종족을 선택한다. - 종족에 맞는 본진을 가진다(저그: 해처리, 테란 : 커맨드센터, 프로토스 : 넥서스) - 각 종족은 자원을 캘 일꾼을 가진다(저그 : 드론, 테란 : SCV , 토스 : 프로브) - 게임 시작과 함께 각 종족에 맞는 본진 + 일꾼을 셋트로 생성해야 한다.
  • 6. enum 및 Class 정의
  • 7. • 직접 타입 조건 체크 사용하여 객체생성
  • 8. • 직접 타입 조건 체크 사용하여 객체생성 – 그림으로 테란 제품군 생성 토스 제품군 생성 저그 제품군 생성 본진, 일꾼을 생성하는 각각의 코드가 존재한다. 각각의 코드에서 해당 객체 직접 생성
  • 9. • 직접 타입 조건 체크 사용하여 객체생성 <장점> - 매우 직관적이고, 쉽다. <단점> - 직접 생성하는 코드이므로 코드의 추가, 수정, 변경, 삭제 등이 발생시 직접 해당 구현 부 분을 찾아서 + 고쳐야 한다. - Ex) 제 4의 종족이 추가된다면 각각의 본진과 일꾼 생성하는 코드를 찾고 + 추가 해야 한다. - 직접 코드로 제어하기 때문에 해당 객체의 생성이 필요한 곳에서 중복 코드가 발생한다. - Ex) melee, free for all, team 의 모드에서 각각의 코드가 모두 중복해서 필요하다 - 실수를 유발하기 쉽다.
  • 10. • 객체 생성 전담 클래스 활용 - Simple Factory라고도 함(패턴이라고 일컫지는 않음) - 해당 클래스에서 객체생성을 전담함
  • 11. • 객체 생성 전담 클래스 활용 <장점> - 하드코딩 된 객체생성 코드가 여기저기에 중복 사용되고 있는 문제점을 해결 - 변경될 가능성이 많은 부분을 한곳으로 모아서 유지 보수 및 변경에 유연하게 대처 <단점> - 여전히 타입에 따른 조건 체크를 이용하는 코드가 존재함. - 제4의 종족이 추가된다면 역시 해당 코드의 타입 조건 체크 코드를 각각 추가 해야함.
  • 12. • 객체 생성 전담 클래스 활용 – 그림으로 테란 제품군 생성 토스 제품군 생성 저그 제품군 생성 본진, 일꾼을 생성하는 객체생성 클래스가 존재한다. 해당 클래스에서 객체 생성관리.
  • 13. • Abstrac Factory Pattern 활용 - 제품군을 구성하는 클래스의 객체를 생성하는 클래스 - 새로운 제품군을 추가하는 것이 쉽도록 상속을 도입 - 구체적인 제품군별 객체를 생성하는 구현 클래스 존재 - 구현 클래스는 상위의 Abstract Base Class를 상속받아 구현 - 게임 스타트시 제품군을 표현하는 최상위클래스(인터페이스 제공) - 저그로 스타트시 알맞은 제품을 생성하는 제품군 클래스 - 테란으로 스타트시 알맞은 제품을 생성하는 제품군 클래스 - 프로토스로 스타트시 알맞은 제품을 생성하는 제품군 클래스 - 각 종족별 제품군 클래스는 최상위 클래스를 상속받아 구체적인 객체 생성
  • 14. • Abstrac Factory Pattern 활용
  • 15. • Abstrac Factory Pattern 활용 각각의 종족별 본진+일꾼을 한 Set으로 만들어 객체 생성 각 종족에 맞는 Factory Class
  • 16. • Abstrac Factory Pattern 활용 – 그림으로 테란 제품군 생성 토스 제품군 생성 저그 제품군 생성 본진 + 일꾼 세트를 생성하는 Factory 클래스가 존재한다. 해당 클래스에서 자기 자신이 생성하는 객체들 생성
  • 17. • Abstrac Factory Pattern 활용 <장점> - 직접 조건 활용이나 객체 전담 클래스에서 필요했던 타입에 다른 조건 체크가 필요 없음 - 직접 조건 활용이나 객체 전담 클래스에서 객체 생성에 수정이 필요하다면 직접 해당 조건에 대해 알맞은 작업내용을 코드로 추가해야 했다. 하지만 Abstract Factory Pattern에서는 해당 객체 생성 수정이 필요한 Factory Class에서만 수정 변경하므로 의존성이 없음 - 어떤 Factory Class를 활용하여 제품군을 생성할 것인지 정해지면 나머지 객체 생성에 있어서 조건 체크가 필요 없음 - 이전 코드에 대한 분석 및 수정이 필요 없이 독립적으로 객체 생성을 가능하게 한다. <단점> - 제 4의 종족이 추가된다면 해당 종족에 대한 구현 Factory Class가 추가되어야 함. - 제5, 6, 7의 종족이 추가된다면 각각 Factory Class를 구현해야 하므로 Factory Class 개수가 많 아짐 - Factory 자체 제품군이 추가된다면 모든 Factory Class를 수정해야 한다. Ex) 각 종족 시작시 영웅을 한마리씩 준다고 게임 룰이 바뀐다면?
  • 18. • Abstrac Factory Pattern 활용 – 단점 해결 방안 - 보통 Abstract Factory Pattern을 활용시 객체 생성을 하는 클래스는 고유한 경우가 많다. 직관적으로 커맨드센터 + SCV를 생성하는 제품군 Factory 클래스가 2개이상이어야 할 이유는 없다. 따라서 이런경우 Singleton 패턴을 적용시켜 특정 Factory Class가 비효율적 으로 2개 이상 생성되는 것을 피할 수 있다. - Abstrac Factory Pattern은 구현 Factory Class가 늘어날 수 있다는 단점이 있다. 이는 Prototype패턴을 활용하여 해결할 수 있다. 하지만 Prototype패턴을 사용하면 Factory Class에 객체의 인스턴스를 모두 가지고 있어야하는 부담이 따른다. 또한 객체의 인스턴 스를 제대로 정의하지않으면 제품군에 맞는 알맞은 객체 생성을 보장할 수 없다. - 만약 제품군 자체에 대한 수정변경이 있을경우 각 Factory Class또한 수정 변경을 해주어 야한다. 이를 해결하기위해 다형성 + prototype패턴을 활용한다. 이에 대한 자세한 사항 은 prototype패턴을 공부한 후 다시 정리해보기로 한다.
  • 19. • Abstract Factory Pattern 활용 – 정리 - 객체의 생성을 독립적으로 만드는데 아주 유리한 패턴 - 여러 제품군이 있다면 특정한 제품군에 알맞은 객체를 생성하도록 보장하길 원할때 유용 함 - 여러 제품군이 있다면 어떤 제품군을 선택할 것인지 직관적이고 명료함 - 제품군 생성에 대한 Abstract Class를 활용하므로, 구체적인 Factory Class의 내부는 몰라 도됨 - 구체적인 객체생성에 대한 캡슐화와 정보은닉 - 항상 Abstract Factory Pattern이 유용한 것은 아니다. 제품군에 대한 객체 생성이 단순명 료하고, 제품군 자체의 수가 적다면 Simple Factory 구현 만으로도 충분할 수 있다. 이것 을 판단할 수 있는 경험과 노하우를 쌓는 것이 중요하다.
  • 20. End 참고자료 : GOF 디자인패턴, HeadFirstDesignPattern, Wiki