SlideShare a Scribd company logo
1 of 10
Download to read offline
SWIFT
Decorator
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Decorator
•Structure
•Implementation
•References
Decorator
Decorator(데코레이터) 디자인 패턴은 특정 객체에 대해서 새로
운 기능을 동적(Run-time)으로 추가하기 위한 구조 설계 패턴입니
다.
객체에 동적으로 기능을 추가하고 코드의 추가를 숨기고 싶은 경우
사용하면 좋습니다.
또한 상속을 통해서 객체를 확장할 수 없는 경우에서도 사용할 수
있습니다.
Decorator
Decorator 패턴을 UML로 도식화하면 아래와 같습니다.
Structure
Component : 기능을 동적으로 확장하기위해 기본이 되는 추상 클
래스 객체
ConcreteComponent : 컴포넌트(Component) 객체의 인터페이
스를 구체화시키는 객체
Decorator : Component 객체를 소유하며 Component의 인터
페이스를 실행하는 객체
ConcreteDecorator : Decorator 가 가지고 있는 Component
객체에 대한 인터페이스의 구체화를 실현하는 객체
Implementation
구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다.
protocol Component {
func operation() -> String
}
class ConcreteComponent: Component {
func operation() -> String {
return "ConcreteComponent operation"
}
}
class Decorator : Component {
private var component: Component
init(_ component: Component) {
self.component = component
}
func operation() -> String {
return component.operation()
}
}
Implementation
class ConcreteDecoratorA : Decorator {
override func operation() -> String {
return "ConcreteDecoratorA(" + super.operation() + ")"
}
}
class ConcreteDecoratorB : Decorator {
override func operation() -> String {
return "ConcreteDecoratorB(" + super.operation() + ")"
}
}
let component = ConcreteComponent()
print("Result: " + component.operation())
// Result: ConcreteComponent operation
let decorator1 = ConcreteDecoratorA(component)
print("Result: " + decorator1.operation())
// Result: ConcreteDecoratorA(ConcreteComponent operation)
let decorator2 = ConcreteDecoratorB(decorator1)
print("Result: " + decorator2.operation())
// Result: ConcreteDecoratorB(ConcreteDecoratorA(ConcreteComponent operation))
References
[1] [Swift-Design Pattern] 데코레이터 패턴(Decorator pattern)
: http://throughkim.kr/2019/09/09/swift-decorator/
[2] Decorator in Swift : https://refactoring.guru/design-
patterns/decorator/swift/example#lang-features
[3] [DesignPattern]데코레이터 패턴(Decorator Pattern) :
http://minsone.github.io/programming/designpattern-
decorator
[4] Top 5 스위프트 디자인 패턴 (번역) : https://
leejigun.github.io/Top_5_Design_Patterns
[5] Design Patterns in Swift: Decorator Pattern : https://
medium.com/design-patterns-in-swift/design-patterns-in-
swift-decorator-pattern-2026e7112869
References
[6] Decorator pattern in Swift : https://medium.com/jeremy-
codes/decorator-pattern-in-swift-e5fa11ea3c3f
[7] Swift Solutions: Decorator Pattern : https://swiftcraft.io/
decorator-pattern-swift/
[8] [Design Pattern] 데코레이터(Decorator) 패턴 - 디자인 패턴 :
https://palpit.tistory.com/193
[9] 데코레이터 패턴(Decorator Pattern) : https://
unabated.tistory.com/entry/데코레이터-패턴Decorator-Pattern
[10] Design Patterns on iOS using Swift – Part 1/2 : https://
www.raywenderlich.com/477-design-patterns-on-ios-using-
swift-part-1-2
Thank you!

More Related Content

Similar to [Swift] Decorator

Image styling with_web_components
Image styling with_web_componentsImage styling with_web_components
Image styling with_web_components민정 김
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton patternYoonJong Choi
 
[Swift] Mediator
[Swift] Mediator[Swift] Mediator
[Swift] MediatorBill Kim
 
[Swift] Factory Method
[Swift] Factory Method[Swift] Factory Method
[Swift] Factory MethodBill Kim
 
Component configurator
Component configuratorComponent configurator
Component configuratorscor7910
 
[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOPAnselmKim
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
iOS Modular Architecture with Tuist
iOS Modular Architecture with TuistiOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist정민 안
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?John Kim
 
19_DLL의 기본.pptx
19_DLL의 기본.pptx19_DLL의 기본.pptx
19_DLL의 기본.pptxssuser0c2478
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기Han Jung Hyun
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetesNAVER D2
 
프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍Alex Kang
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Woojin Joe
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)양 한빛
 
[Swift] Builder
[Swift] Builder[Swift] Builder
[Swift] BuilderBill Kim
 

Similar to [Swift] Decorator (20)

Image styling with_web_components
Image styling with_web_componentsImage styling with_web_components
Image styling with_web_components
 
Codex project
Codex projectCodex project
Codex project
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton pattern
 
[Swift] Mediator
[Swift] Mediator[Swift] Mediator
[Swift] Mediator
 
[Swift] Factory Method
[Swift] Factory Method[Swift] Factory Method
[Swift] Factory Method
 
Component configurator
Component configuratorComponent configurator
Component configurator
 
Design patterns
Design patternsDesign patterns
Design patterns
 
[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
iOS Modular Architecture with Tuist
iOS Modular Architecture with TuistiOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?
 
Bridge
BridgeBridge
Bridge
 
19_DLL의 기본.pptx
19_DLL의 기본.pptx19_DLL의 기본.pptx
19_DLL의 기본.pptx
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
 
[Swift] Builder
[Swift] Builder[Swift] Builder
[Swift] Builder
 

More from Bill Kim

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting ComparisonBill Kim
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O NotationBill Kim
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell SortBill Kim
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix SortBill Kim
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick SortBill Kim
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap SortBill Kim
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting SortBill Kim
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge SortBill Kim
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion SortBill Kim
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble SortBill Kim
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary SearchBill Kim
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)Bill Kim
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVLBill Kim
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search TreeBill Kim
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)Bill Kim
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)Bill Kim
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary TreeBill Kim
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - TreeBill Kim
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - GraphBill 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] Decorator

  • 3. Decorator Decorator(데코레이터) 디자인 패턴은 특정 객체에 대해서 새로 운 기능을 동적(Run-time)으로 추가하기 위한 구조 설계 패턴입니 다. 객체에 동적으로 기능을 추가하고 코드의 추가를 숨기고 싶은 경우 사용하면 좋습니다. 또한 상속을 통해서 객체를 확장할 수 없는 경우에서도 사용할 수 있습니다.
  • 4. Decorator Decorator 패턴을 UML로 도식화하면 아래와 같습니다.
  • 5. Structure Component : 기능을 동적으로 확장하기위해 기본이 되는 추상 클 래스 객체 ConcreteComponent : 컴포넌트(Component) 객체의 인터페이 스를 구체화시키는 객체 Decorator : Component 객체를 소유하며 Component의 인터 페이스를 실행하는 객체 ConcreteDecorator : Decorator 가 가지고 있는 Component 객체에 대한 인터페이스의 구체화를 실현하는 객체
  • 6. Implementation 구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다. protocol Component { func operation() -> String } class ConcreteComponent: Component { func operation() -> String { return "ConcreteComponent operation" } } class Decorator : Component { private var component: Component init(_ component: Component) { self.component = component } func operation() -> String { return component.operation() } }
  • 7. Implementation class ConcreteDecoratorA : Decorator { override func operation() -> String { return "ConcreteDecoratorA(" + super.operation() + ")" } } class ConcreteDecoratorB : Decorator { override func operation() -> String { return "ConcreteDecoratorB(" + super.operation() + ")" } } let component = ConcreteComponent() print("Result: " + component.operation()) // Result: ConcreteComponent operation let decorator1 = ConcreteDecoratorA(component) print("Result: " + decorator1.operation()) // Result: ConcreteDecoratorA(ConcreteComponent operation) let decorator2 = ConcreteDecoratorB(decorator1) print("Result: " + decorator2.operation()) // Result: ConcreteDecoratorB(ConcreteDecoratorA(ConcreteComponent operation))
  • 8. References [1] [Swift-Design Pattern] 데코레이터 패턴(Decorator pattern) : http://throughkim.kr/2019/09/09/swift-decorator/ [2] Decorator in Swift : https://refactoring.guru/design- patterns/decorator/swift/example#lang-features [3] [DesignPattern]데코레이터 패턴(Decorator Pattern) : http://minsone.github.io/programming/designpattern- decorator [4] Top 5 스위프트 디자인 패턴 (번역) : https:// leejigun.github.io/Top_5_Design_Patterns [5] Design Patterns in Swift: Decorator Pattern : https:// medium.com/design-patterns-in-swift/design-patterns-in- swift-decorator-pattern-2026e7112869
  • 9. References [6] Decorator pattern in Swift : https://medium.com/jeremy- codes/decorator-pattern-in-swift-e5fa11ea3c3f [7] Swift Solutions: Decorator Pattern : https://swiftcraft.io/ decorator-pattern-swift/ [8] [Design Pattern] 데코레이터(Decorator) 패턴 - 디자인 패턴 : https://palpit.tistory.com/193 [9] 데코레이터 패턴(Decorator Pattern) : https:// unabated.tistory.com/entry/데코레이터-패턴Decorator-Pattern [10] Design Patterns on iOS using Swift – Part 1/2 : https:// www.raywenderlich.com/477-design-patterns-on-ios-using- swift-part-1-2