SlideShare a Scribd company logo
Builder, Prototype,
Singleton
Design Pattern – Generation Pattern
Contents
 Builder
 Prototype
 Singleton
 Summary
Builder
복잡한 객체의 여러 가지 생성 방법, 표현 방법마다 동일한 절차를 제공
Motive & Usability
 동일 객체의 표현 방법 다양화
 MVC의 View의 역할 수행
 객체의 생성 방법을 분리하여 다양화
 여러 생성 알고리즘이 독립적으로 존재하는 경우
 다양화된 생성 & 표현 방법을 동일한 절차로 사용
PDF
document
Structure & Contributors
Director
Construct()
Builder
BuildPart()
Concrete Builder
BuildPart()
GetResult()
Product
for all objects in structure {
builder->BuildPart()
}
구현된 빌더의 종류가 다양함
추상 빌더(인터페이스 제공)실제 생성 절차 수행
생성 or 표현된 객체
Cooperation Method
new ConcreteBuilder
new Director(aConcreteBuilder)
Construct() BuildPartA()
BuildPartB()
…
GetResult()
aClient aDirector aConcretBuilder
Effect
 제품의 내부 표현 다양화
 Builder를 통해 내부 표현 방법 관리
 표현 방법을 추가하거나 수정할 때는 서브클래싱을 사용
 생성 및 표현에 필요한 코드 분리
 제품 객체의 세부 내용 캡슐화
 생성 및 표현 절차 세분화
 Director에서 실제 객체 생성
Implements
1. 조합, 구축에 필요한 인터페이스 정의
 절차 상 추가 작업이 필요한 부분을 인터페이스로 정의
2. 제품 객체의 추상화 여부
 만들어질 객체 간 공통점이 없는 경우 추상 클래스를 두지 않음
3. 일반적으로 Builder에서는 객체의 동작을 구현하지 않음
 순수 가상 함수로 두지 않고 몸통을 비워둡니다
 Open-Close Principle
Prototype
원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게
만든 견본을 복사해서 새로운 객체를 생성
Motive & Usability
 무분별한 서브클래싱 예방
 범용 객체를 최대한 활용
 객체 생성 비용 절약
 초기 값은 유지하되 일부 값을 변경하여 사용
 Factory와는 다르다! Factory와는!
 클래스 그룹을 형성하지 않음
 런타임에 클래스 결정
 Factory로 생성하는 객체를 복제하는 방법으로 조합 가능
Structure & Contributors
Client
Operation()
Prototype
Clone()
p = prototype->Clone()
Prototype
Clone()
Prototype
Clone()
return copy of self return copy of self
Clone() 인터페이스 정의
실제 Clone() 동작 구현
갖다씀
Effect
 런타임에 새로운 객체 추가/삭제
 값, 구조를 다양화하여 새로운 객체 정의
 멤버 변수의 값에 따라 새로운 객체 정의
 기본 골격만을 원형으로 제공하여 유연성 확보
 서브클래스의 수를 줄임
 동적으로 클래스에 따라 응용프로그램 설정
 Prototype Manager를 통해 클래스-프로그램 간 연결
Implements
1. Prototype Manager 사용
 주로 Factory Method로 구현하거나 필요한 원형을 추가 등록
2. Clone() 구현
 얕은 복사/깊은 복사를 잘 구분해야 합니다
3. Clone() 초기화
 Clone()으로 객체 생성 이후 초기 값 설정
 Initialize() 추가 구현
Singleton
오직 한 개의 클래스 인스턴스만을 갖도록 보장, 전역적인 접근점 제공
=전역 변수
Motive & Usability, Structure
 전역 변수의 객체지향 버전
 전역 객체를 서브클래싱으로 확장 가능
Singleton
static Instance()
…
static uniqueInstance
Singleton Data
Effect
 인스턴스 접근 통제
 namespace 오용 예방
 연산 및 표현 방법 정리
 Singleton을 상속 받아 필요한 클래스를 전역화
 인스턴스 개수 변경 가능
 여러 개의 인스턴스에 대한 접근 방법 정의
 정적 연산 대체
Implements
1. 객체의 유일성 보장
 정적 객체의 인스턴스 선언은 한 곳에만 존재하게 구현
 정적 객체의 초기화 시점에 초기화에 필요한 정보의 유무 확인
 C++ 언어 차원에서 전역 객체의 생성 순서는 정의되어 있지 않음(undefined)
2. Singleton 서브클래싱
 유일성이 보장된 서브클래스 관리
 서브클래스 레지스트리
Implements
2. Singleton 서브클래싱
 유일성이 보장된 서브클래스 관리
Summary
Summary
 Factory – 그룹화 된 클래스
 Builder – 객체 변환 작업 or 객체 생성 작업에 사용
 Prototype – Ctrl + C, Ctrl + V
 Singleton – 전역 변수 대체
Summary
Abstract Factory
virtual FactoryMethod() = 0
Singleton
Instance()
Concrete Factory
virtual FactoryMethod()
Concrete Factory
virtual FactoryMethod()
Concrete Factory
virtual FactoryMethod()
FactoryMethod() {
return prototype->Clone();
}

More Related Content

Viewers also liked

Design patterns
Design patternsDesign patterns
Design patterns
Joshua Yoon
 
동영상입문
동영상입문동영상입문
동영상입문
Sukjin Yun
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...
Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...
Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...
Ruud Arkesteijn
 
IoC and DI Pattern
IoC and DI PatternIoC and DI Pattern
IoC and DI Pattern
Sangwon Ko
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
Sukjin Yun
 
Heartbeat
HeartbeatHeartbeat
Heartbeat
Sangwon Ko
 
프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기Sangwon Ko
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
JU Chae
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴
Sungchul Park
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
hyun soomyung
 
UNDERWATER CONSTRUCTION
UNDERWATER CONSTRUCTIONUNDERWATER CONSTRUCTION
UNDERWATER CONSTRUCTION
Hamsui Harold
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기Cosmos Shin
 

Viewers also liked (14)

Design patterns
Design patternsDesign patterns
Design patterns
 
동영상입문
동영상입문동영상입문
동영상입문
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...
Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...
Presentation for lecture on underwater concrete - TU Delft: MSc Geotechnical ...
 
IoC and DI Pattern
IoC and DI PatternIoC and DI Pattern
IoC and DI Pattern
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
 
Heartbeat
HeartbeatHeartbeat
Heartbeat
 
B Fn As
B Fn AsB Fn As
B Fn As
 
프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
UNDERWATER CONSTRUCTION
UNDERWATER CONSTRUCTIONUNDERWATER CONSTRUCTION
UNDERWATER CONSTRUCTION
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
 

Similar to Builder, prototype, singleton pattern

Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
Daniel Lim
 
[Swift] Abstract Factory
[Swift] Abstract Factory[Swift] Abstract Factory
[Swift] Abstract Factory
Bill Kim
 
전달교육(분석설계모델링)
전달교육(분석설계모델링)전달교육(분석설계모델링)
전달교육(분석설계모델링)gimslide
 
Composite pattern
Composite patternComposite pattern
Composite pattern경 송
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
Yeonah Ki
 
아이폰 앱 패턴
아이폰 앱 패턴아이폰 앱 패턴
아이폰 앱 패턴조 용구
 
Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리
ssuser7c5a40
 
[Swift] Builder
[Swift] Builder[Swift] Builder
[Swift] Builder
Bill Kim
 
[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0MinGeun Park
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
hungrok
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 uEngine Solutions
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
 
Effective java
Effective javaEffective java
Effective java
Haeil Yi
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322
jylee6977
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
Rjs Ryu
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
Chris Ohk
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3
uEngine Solutions
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
jinho park
 

Similar to Builder, prototype, singleton pattern (20)

Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
[Swift] Abstract Factory
[Swift] Abstract Factory[Swift] Abstract Factory
[Swift] Abstract Factory
 
전달교육(분석설계모델링)
전달교육(분석설계모델링)전달교육(분석설계모델링)
전달교육(분석설계모델링)
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
아이폰 앱 패턴
아이폰 앱 패턴아이폰 앱 패턴
아이폰 앱 패턴
 
Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리
 
[Swift] Builder
[Swift] Builder[Swift] Builder
[Swift] Builder
 
[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Design patterns
Design patternsDesign patterns
Design patterns
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
Effective java
Effective javaEffective java
Effective java
 
MEC++ 5
MEC++ 5MEC++ 5
MEC++ 5
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 

Builder, prototype, singleton pattern

  • 3. Builder 복잡한 객체의 여러 가지 생성 방법, 표현 방법마다 동일한 절차를 제공
  • 4. Motive & Usability  동일 객체의 표현 방법 다양화  MVC의 View의 역할 수행  객체의 생성 방법을 분리하여 다양화  여러 생성 알고리즘이 독립적으로 존재하는 경우  다양화된 생성 & 표현 방법을 동일한 절차로 사용 PDF document
  • 5. Structure & Contributors Director Construct() Builder BuildPart() Concrete Builder BuildPart() GetResult() Product for all objects in structure { builder->BuildPart() } 구현된 빌더의 종류가 다양함 추상 빌더(인터페이스 제공)실제 생성 절차 수행 생성 or 표현된 객체
  • 6. Cooperation Method new ConcreteBuilder new Director(aConcreteBuilder) Construct() BuildPartA() BuildPartB() … GetResult() aClient aDirector aConcretBuilder
  • 7. Effect  제품의 내부 표현 다양화  Builder를 통해 내부 표현 방법 관리  표현 방법을 추가하거나 수정할 때는 서브클래싱을 사용  생성 및 표현에 필요한 코드 분리  제품 객체의 세부 내용 캡슐화  생성 및 표현 절차 세분화  Director에서 실제 객체 생성
  • 8. Implements 1. 조합, 구축에 필요한 인터페이스 정의  절차 상 추가 작업이 필요한 부분을 인터페이스로 정의 2. 제품 객체의 추상화 여부  만들어질 객체 간 공통점이 없는 경우 추상 클래스를 두지 않음 3. 일반적으로 Builder에서는 객체의 동작을 구현하지 않음  순수 가상 함수로 두지 않고 몸통을 비워둡니다  Open-Close Principle
  • 9. Prototype 원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성
  • 10. Motive & Usability  무분별한 서브클래싱 예방  범용 객체를 최대한 활용  객체 생성 비용 절약  초기 값은 유지하되 일부 값을 변경하여 사용  Factory와는 다르다! Factory와는!  클래스 그룹을 형성하지 않음  런타임에 클래스 결정  Factory로 생성하는 객체를 복제하는 방법으로 조합 가능
  • 11. Structure & Contributors Client Operation() Prototype Clone() p = prototype->Clone() Prototype Clone() Prototype Clone() return copy of self return copy of self Clone() 인터페이스 정의 실제 Clone() 동작 구현 갖다씀
  • 12. Effect  런타임에 새로운 객체 추가/삭제  값, 구조를 다양화하여 새로운 객체 정의  멤버 변수의 값에 따라 새로운 객체 정의  기본 골격만을 원형으로 제공하여 유연성 확보  서브클래스의 수를 줄임  동적으로 클래스에 따라 응용프로그램 설정  Prototype Manager를 통해 클래스-프로그램 간 연결
  • 13. Implements 1. Prototype Manager 사용  주로 Factory Method로 구현하거나 필요한 원형을 추가 등록 2. Clone() 구현  얕은 복사/깊은 복사를 잘 구분해야 합니다 3. Clone() 초기화  Clone()으로 객체 생성 이후 초기 값 설정  Initialize() 추가 구현
  • 14. Singleton 오직 한 개의 클래스 인스턴스만을 갖도록 보장, 전역적인 접근점 제공 =전역 변수
  • 15. Motive & Usability, Structure  전역 변수의 객체지향 버전  전역 객체를 서브클래싱으로 확장 가능 Singleton static Instance() … static uniqueInstance Singleton Data
  • 16. Effect  인스턴스 접근 통제  namespace 오용 예방  연산 및 표현 방법 정리  Singleton을 상속 받아 필요한 클래스를 전역화  인스턴스 개수 변경 가능  여러 개의 인스턴스에 대한 접근 방법 정의  정적 연산 대체
  • 17. Implements 1. 객체의 유일성 보장  정적 객체의 인스턴스 선언은 한 곳에만 존재하게 구현  정적 객체의 초기화 시점에 초기화에 필요한 정보의 유무 확인  C++ 언어 차원에서 전역 객체의 생성 순서는 정의되어 있지 않음(undefined) 2. Singleton 서브클래싱  유일성이 보장된 서브클래스 관리  서브클래스 레지스트리
  • 18. Implements 2. Singleton 서브클래싱  유일성이 보장된 서브클래스 관리
  • 20. Summary  Factory – 그룹화 된 클래스  Builder – 객체 변환 작업 or 객체 생성 작업에 사용  Prototype – Ctrl + C, Ctrl + V  Singleton – 전역 변수 대체
  • 21. Summary Abstract Factory virtual FactoryMethod() = 0 Singleton Instance() Concrete Factory virtual FactoryMethod() Concrete Factory virtual FactoryMethod() Concrete Factory virtual FactoryMethod() FactoryMethod() { return prototype->Clone(); }