SlideShare a Scribd company logo
SWIFT
Factory Method
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Factory Method
•Structure
•Implementation
•References
Factory Method
Factory Mthod(팩토리 매소드) 디자인 패턴은 객체 생성을 위해
인터페이스는 정의하지만 어떤 클래스의 인스턴스를 생성할 지에
결정은 서브클래스가 정의하도록 해주는 디자인 패턴입니다.
팩토리 메서드는 직접 인스턴스를 생성하는 대신 생성을 위한 메서
드를 인터페이스로 제공합니다. 서브 클래스는 생성될 객체의 클래
스를 변경하기 위해서 메서드를 재정의 할 수 있습니다.
Factory Method
팩토리 매소드 패턴을 위해서 필요한 객체 구성은 아래와 같습니다.
Structure
Creator : 추상 팩토리 메소드 정의 및 팩토리 메소드를 호출하여
Product를 생성하기 위한 객체
Product : 팩토리 메소드에 의해 성성되는 기본 인터페이스 객체
Concrete Creator : 팩토리 메소드를 구현하고 Concrete
Product 인스턴스를 반환하는 객체
Concrete Product : Product를 구현하는 객체
Implementation
구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다.
// Creator
protocol Creator {
func factoryMethod() -> Product
func someOperation() -> String
}
extension Creator {
func someOperation() -> String {
let product = factoryMethod()
return product.operation()
}
}
// Product
protocol Product {
func operation() -> String
}
Implementation
// Concrete Creators
class ConcreteCreator1: Creator {
public func factoryMethod() -> Product {
return ConcreteProduct1()
}
}
class ConcreteCreator2: Creator {
public func factoryMethod() -> Product {
return ConcreteProduct2()
}
}
// Concrete Products
class ConcreteProduct1: Product {
func operation() -> String {
print("ConcreteProduct1 operation")
return "ConcreteProduct1 operation"
}
}
class ConcreteProduct2: Product {
func operation() -> String {
print("ConcreteProduct2 operation")
return "ConcreteProduct2 operation"
}
}
Implementation
func concreteClient(creator: Creator) {
creator.someOperation()
}
concreteClient(creator: ConcreteCreator1())
// ConcreteProduct1 operation
concreteClient(creator: ConcreteCreator2())
// ConcreteProduct2 operation
References
[1] 팩토리 메서드 패턴 : https://jerome.kr/entry/factory-method-
pattern?category=1114713
[2] [Swift] 팩토리 메서드(Factory Method) 패턴 : https://
m.blog.naver.com/PostView.nhn?
blogId=horajjan&logNo=220804516206&categoryNo=97&prox
yReferer=&proxyReferer=https:%2F%2Fwww.google.com%2F
[3] Design Pattern - Factory : https://ehdrjsdlzzzz.github.io/
2019/04/03/Design-Pattern-Factory/
[4] Swift Solutions: Factory Method Pattern : https://
swiftcraft.io/swift-solutions-factory-method-pattern/
[5] Factory Method in Swift : https://refactoring.guru/design-
patterns/factory-method/swift/example
References
[6] Swift factory method design pattern : https://
theswiftdev.com/swift-factory-method-design-pattern/
[7] Factory Method in Swift : https://medium.com/jeremy-codes/
factory-method-in-swift-d5222dd6e61d
[8] [Design Pattern] Factory method pattern : https://
medium.com/@eyegochild/design-pattern-factory-method-
pattern-dc72f35e1076
[9] 디자인 패턴 : 추상 팩토리 vs 팩토리 메소드 : https://www.it-
swarm.dev/ko/design-patterns/디자인-패턴-추상-팩토리-vs-팩토리-
메소드/970371311/
[10] Design Patterns in Swift #1 Factory Method and Singleton :
https://www.appcoda.com/design-pattern-creational/
Thank you!

More Related Content

PDF
190311 factory
PDF
[Swift] Proxy
ODP
Design Pattern 3
PDF
[Swift] Abstract Factory
PPTX
Builder, prototype, singleton pattern
PDF
[Swift] Prototype
PDF
[Swift] Builder
PPTX
도메인 주도 설계 - 6장 도메인 객체의 생명주기
190311 factory
[Swift] Proxy
Design Pattern 3
[Swift] Abstract Factory
Builder, prototype, singleton pattern
[Swift] Prototype
[Swift] Builder
도메인 주도 설계 - 6장 도메인 객체의 생명주기

Similar to [Swift] Factory Method (16)

PDF
HolubOnPatterns/chapter2_2
PDF
Effective java
PDF
PDF
[Swift] Decorator
PPTX
Design patterns
PDF
Spring Framework - Inversion of Control Container
PPTX
[스프링 스터디 2일차] AOP
PPTX
Abstract factory pattern
PDF
Javascript 객체생성패턴
DOCX
Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
PDF
2014-15 Intermediate C++ Study #6
PPTX
Refelction의 개념과 RTTR 라이브러리
PPTX
디자인 패턴 적용
PPTX
StarUML NS Guide - Design
PPTX
Mec chapter 5,6
PPTX
Stonze study week1
HolubOnPatterns/chapter2_2
Effective java
[Swift] Decorator
Design patterns
Spring Framework - Inversion of Control Container
[스프링 스터디 2일차] AOP
Abstract factory pattern
Javascript 객체생성패턴
Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
2014-15 Intermediate C++ Study #6
Refelction의 개념과 RTTR 라이브러리
디자인 패턴 적용
StarUML NS Guide - Design
Mec chapter 5,6
Stonze study week1
Ad

More from Bill Kim (20)

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

[Swift] Factory Method

  • 3. Factory Method Factory Mthod(팩토리 매소드) 디자인 패턴은 객체 생성을 위해 인터페이스는 정의하지만 어떤 클래스의 인스턴스를 생성할 지에 결정은 서브클래스가 정의하도록 해주는 디자인 패턴입니다. 팩토리 메서드는 직접 인스턴스를 생성하는 대신 생성을 위한 메서 드를 인터페이스로 제공합니다. 서브 클래스는 생성될 객체의 클래 스를 변경하기 위해서 메서드를 재정의 할 수 있습니다.
  • 4. Factory Method 팩토리 매소드 패턴을 위해서 필요한 객체 구성은 아래와 같습니다.
  • 5. Structure Creator : 추상 팩토리 메소드 정의 및 팩토리 메소드를 호출하여 Product를 생성하기 위한 객체 Product : 팩토리 메소드에 의해 성성되는 기본 인터페이스 객체 Concrete Creator : 팩토리 메소드를 구현하고 Concrete Product 인스턴스를 반환하는 객체 Concrete Product : Product를 구현하는 객체
  • 6. Implementation 구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다. // Creator protocol Creator { func factoryMethod() -> Product func someOperation() -> String } extension Creator { func someOperation() -> String { let product = factoryMethod() return product.operation() } } // Product protocol Product { func operation() -> String }
  • 7. Implementation // Concrete Creators class ConcreteCreator1: Creator { public func factoryMethod() -> Product { return ConcreteProduct1() } } class ConcreteCreator2: Creator { public func factoryMethod() -> Product { return ConcreteProduct2() } } // Concrete Products class ConcreteProduct1: Product { func operation() -> String { print("ConcreteProduct1 operation") return "ConcreteProduct1 operation" } } class ConcreteProduct2: Product { func operation() -> String { print("ConcreteProduct2 operation") return "ConcreteProduct2 operation" } }
  • 8. Implementation func concreteClient(creator: Creator) { creator.someOperation() } concreteClient(creator: ConcreteCreator1()) // ConcreteProduct1 operation concreteClient(creator: ConcreteCreator2()) // ConcreteProduct2 operation
  • 9. References [1] 팩토리 메서드 패턴 : https://jerome.kr/entry/factory-method- pattern?category=1114713 [2] [Swift] 팩토리 메서드(Factory Method) 패턴 : https:// m.blog.naver.com/PostView.nhn? blogId=horajjan&logNo=220804516206&categoryNo=97&prox yReferer=&proxyReferer=https:%2F%2Fwww.google.com%2F [3] Design Pattern - Factory : https://ehdrjsdlzzzz.github.io/ 2019/04/03/Design-Pattern-Factory/ [4] Swift Solutions: Factory Method Pattern : https:// swiftcraft.io/swift-solutions-factory-method-pattern/ [5] Factory Method in Swift : https://refactoring.guru/design- patterns/factory-method/swift/example
  • 10. References [6] Swift factory method design pattern : https:// theswiftdev.com/swift-factory-method-design-pattern/ [7] Factory Method in Swift : https://medium.com/jeremy-codes/ factory-method-in-swift-d5222dd6e61d [8] [Design Pattern] Factory method pattern : https:// medium.com/@eyegochild/design-pattern-factory-method- pattern-dc72f35e1076 [9] 디자인 패턴 : 추상 팩토리 vs 팩토리 메소드 : https://www.it- swarm.dev/ko/design-patterns/디자인-패턴-추상-팩토리-vs-팩토리- 메소드/970371311/ [10] Design Patterns in Swift #1 Factory Method and Singleton : https://www.appcoda.com/design-pattern-creational/