SlideShare a Scribd company logo
1 of 13
Download to read offline
SWIFT
Builder
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Builder
•Structure
•Implementation
•References
Builder
Builder(빌더) 디자인 패턴은 복합 객체의 생성 과정과 표현 방법
을 분리하여 동일한 생성 절차를 통하여 서로 다른 결과를 만들 수
있게 해주는 패턴입니다.
즉 생성 절차는 항상 동일하되 결과는 다르게 만들어주는 디자인 패
턴입니다.
또한 객체 내의 여러 속성들에 대해서 체이닝 형식으로 생성할 수
도 있습니다.
Builder
빌더 패턴을 UML로 도식화하면 아래와 같습니다.
Structure
Director : 객체 생성 방식에 대한 책임을 가진 객체
Builder : 객체를 생성하는 추상 인터페이스 객체
ConCreateBuilder : 제품에 대한 인터페이스를 추상적으로 정의
하는 객체
Product : Builder를 이용해서 Director가 만들어 낸 최종 객체
Implementation
구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다.
class Product {
var value1: Int = 0
var value2: Int = 0
var value3: Int = 0
}
protocol Builder {
var product:Product { get set }
func build() -> Builder
func getProduct() -> Product
func setValue1(value: Int) -> Builder
func setValue2(value: Int) -> Builder
func setValue3(value: Int) -> Builder
}
Implementation
class ConCreateBuilderA : Builder {
var product = Product()
func getProduct() -> Product {
return product
}
func build() -> Builder
{
setValue1(value: 1)
setValue2(value: 2)
setValue2(value: 3)
return self
}
func setValue1(value: Int) -> Builder {
product.value1 = value
return self
}
func setValue2(value: Int) -> Builder {
product.value2 = value
return self
}
func setValue3(value: Int) -> Builder {
product.value3 = value
return self
}
}
Implementation
class ConCreateBuilderB : Builder {
var product = Product()
func getProduct() -> Product {
return product
}
func build() -> Builder
{
setValue1(value: 10)
setValue2(value: 20)
setValue2(value: 30)
return self
}
func setValue1(value: Int) -> Builder {
product.value1 = value
return self
}
func setValue2(value: Int) -> Builder {
product.value2 = value
return self
}
func setValue3(value: Int) -> Builder {
product.value3 = value
return self
}
}
Implementation
class Director {
var builder: Builder
init(builder: Builder) {
self.builder = builder
}
// Construct
func build() -> Builder {
return builder.build()
}
}
Implementation
let product1 = Director(builder:ConCreateBuilderA()).build()
print("product1.value1 : (product1.getProduct().value1)")
// product1.value1 : 1
let product2 = Director(builder:ConCreateBuilderB()).build()
print("product2.value1 : (product2.getProduct().value1)")
// product2.value1 : 10
let product3 = Director(builder:ConCreateBuilderB()).build()
// 체이닝 방식으로 각 속성 재설정 가능
product3.setValue1(value: 100).setValue2(value: 200).setValue3(value: 300)
print("product3.value1 : (product3.getProduct().value1)")
// product3.value1 : 100
References
[1] 스위프트에서 빌더 패턴 구현 : https://
dev3m.tistory.com/entry/스위프트에서-빌더-패턴-구현
[2] Builder pattern(swift) : https://linsaeng.tistory.com/
7
[3] [DP] 2. 빌더 패턴(Builder Pattern) : https://
asfirstalways.tistory.com/350
[4] Top 5 스위프트 디자인 패턴 (번역) : https://
leejigun.github.io/Top_5_Design_Patterns
[5] 빌더 패턴 Builder Pattern : https://dev-
momo.tistory.com/entry/빌더-패턴-Builder-Pattern
References
[6] iOS와 디자인 패턴 : https://10apps.tistory.com/153
[7] 디자인 패턴[1] : 빌더 패턴 Builder pattern : https://
altongmon.tistory.com/508
[8] [Design Pattern] 빌더(Builder) 패턴 - 디자인 패턴 :
https://palpit.tistory.com/191
[9] The Builder Pattern : https://medium.com/jeremy-
codes/the-builder-pattern-eef3351bcae9
[10] 빌더 패턴(Builder Pattern) : https://
johngrib.github.io/wiki/builder-pattern/
Thank you!

More Related Content

Similar to [Swift] Builder

1장 시작하기
1장 시작하기1장 시작하기
1장 시작하기
조 용구
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
SeungHyun Hwang
 

Similar to [Swift] Builder (15)

02.개발환경 실습교재
02.개발환경 실습교재02.개발환경 실습교재
02.개발환경 실습교재
 
1장 시작하기
1장 시작하기1장 시작하기
1장 시작하기
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
[Swift] Mediator
[Swift] Mediator[Swift] Mediator
[Swift] Mediator
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
[Swift] Decorator
[Swift] Decorator[Swift] Decorator
[Swift] Decorator
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기
 
Setting open cv for vs2012, and use Image Watch tool
Setting open cv for vs2012, and use Image Watch toolSetting open cv for vs2012, and use Image Watch tool
Setting open cv for vs2012, and use Image Watch tool
 
StarUML NS Guide - Design
StarUML NS Guide - DesignStarUML NS Guide - Design
StarUML NS Guide - Design
 
Protocol Oriented Programming in Swift
Protocol Oriented Programming in SwiftProtocol Oriented Programming in Swift
Protocol Oriented Programming in Swift
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
 

More from Bill Kim

More from Bill Kim (20)

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O Notation
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell Sort
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix Sort
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick Sort
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap Sort
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge Sort
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion Sort
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble Sort
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary Search
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVL
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - Tree
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - Graph
 

[Swift] Builder

  • 3. Builder Builder(빌더) 디자인 패턴은 복합 객체의 생성 과정과 표현 방법 을 분리하여 동일한 생성 절차를 통하여 서로 다른 결과를 만들 수 있게 해주는 패턴입니다. 즉 생성 절차는 항상 동일하되 결과는 다르게 만들어주는 디자인 패 턴입니다. 또한 객체 내의 여러 속성들에 대해서 체이닝 형식으로 생성할 수 도 있습니다.
  • 4. Builder 빌더 패턴을 UML로 도식화하면 아래와 같습니다.
  • 5. Structure Director : 객체 생성 방식에 대한 책임을 가진 객체 Builder : 객체를 생성하는 추상 인터페이스 객체 ConCreateBuilder : 제품에 대한 인터페이스를 추상적으로 정의 하는 객체 Product : Builder를 이용해서 Director가 만들어 낸 최종 객체
  • 6. Implementation 구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다. class Product { var value1: Int = 0 var value2: Int = 0 var value3: Int = 0 } protocol Builder { var product:Product { get set } func build() -> Builder func getProduct() -> Product func setValue1(value: Int) -> Builder func setValue2(value: Int) -> Builder func setValue3(value: Int) -> Builder }
  • 7. Implementation class ConCreateBuilderA : Builder { var product = Product() func getProduct() -> Product { return product } func build() -> Builder { setValue1(value: 1) setValue2(value: 2) setValue2(value: 3) return self } func setValue1(value: Int) -> Builder { product.value1 = value return self } func setValue2(value: Int) -> Builder { product.value2 = value return self } func setValue3(value: Int) -> Builder { product.value3 = value return self } }
  • 8. Implementation class ConCreateBuilderB : Builder { var product = Product() func getProduct() -> Product { return product } func build() -> Builder { setValue1(value: 10) setValue2(value: 20) setValue2(value: 30) return self } func setValue1(value: Int) -> Builder { product.value1 = value return self } func setValue2(value: Int) -> Builder { product.value2 = value return self } func setValue3(value: Int) -> Builder { product.value3 = value return self } }
  • 9. Implementation class Director { var builder: Builder init(builder: Builder) { self.builder = builder } // Construct func build() -> Builder { return builder.build() } }
  • 10. Implementation let product1 = Director(builder:ConCreateBuilderA()).build() print("product1.value1 : (product1.getProduct().value1)") // product1.value1 : 1 let product2 = Director(builder:ConCreateBuilderB()).build() print("product2.value1 : (product2.getProduct().value1)") // product2.value1 : 10 let product3 = Director(builder:ConCreateBuilderB()).build() // 체이닝 방식으로 각 속성 재설정 가능 product3.setValue1(value: 100).setValue2(value: 200).setValue3(value: 300) print("product3.value1 : (product3.getProduct().value1)") // product3.value1 : 100
  • 11. References [1] 스위프트에서 빌더 패턴 구현 : https:// dev3m.tistory.com/entry/스위프트에서-빌더-패턴-구현 [2] Builder pattern(swift) : https://linsaeng.tistory.com/ 7 [3] [DP] 2. 빌더 패턴(Builder Pattern) : https:// asfirstalways.tistory.com/350 [4] Top 5 스위프트 디자인 패턴 (번역) : https:// leejigun.github.io/Top_5_Design_Patterns [5] 빌더 패턴 Builder Pattern : https://dev- momo.tistory.com/entry/빌더-패턴-Builder-Pattern
  • 12. References [6] iOS와 디자인 패턴 : https://10apps.tistory.com/153 [7] 디자인 패턴[1] : 빌더 패턴 Builder pattern : https:// altongmon.tistory.com/508 [8] [Design Pattern] 빌더(Builder) 패턴 - 디자인 패턴 : https://palpit.tistory.com/191 [9] The Builder Pattern : https://medium.com/jeremy- codes/the-builder-pattern-eef3351bcae9 [10] 빌더 패턴(Builder Pattern) : https:// johngrib.github.io/wiki/builder-pattern/