SlideShare a Scribd company logo
1 of 11
Download to read offline
SWIFT
Strategy
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Strategy
•Structure
•Implementation
•References
Strategy
Strategy 패턴은 클래스의 행위를 캡슐화 하여 동적으로 행위를
자유롭게 바꿀 수 있도록 돕는 패턴이다.
Strategy 패턴은 특정한 계열의 알고리즘(행위) 및 동작을 정의하
고 해당 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서
상호 교체가 가능하게 만들어 줍니다.
즉 Strategy 패턴은 유연하고 재사용 가능한 객체 지향 소프트웨
어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법으로서
객체는 구현, 변경, 테스트, 재사용이 쉬워야 한다는 것을 잘 반영한
행위(Behavioral) 관련 디자인 패턴 중의 하나입니다.
Structure
Strategy 패턴을 UML로 도식화하면 아래와 같습니다.
Structure
Context : Strategy 객체를 소유하고 동적으로 행위를 실행하는
객체
Strategy : ConcreteStrategy 객체의 부모 객체로서 동적으로
지정할 행위에 대한 알고리즘 인터페이스를 정의하는 추상 객체
ConcreteStrategy : 주요 알고리즘 인터페이스 함수에 대한 구현
을 담당하는 객체
Implementation
구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다.
class Context {
private var strategy: Strategy
init(strategy: Strategy) {
self.strategy = strategy
}
func update(strategy: Strategy) {
self.strategy = strategy
}
func doSomeBusinessLogic() {
let result = strategy.doAlgorithm(["a", "b", "c", "d", "e"])
print(result.joined(separator: ","))
}
}
Implementation
protocol Strategy {
func doAlgorithm<T: Comparable>(_ data: [T]) -> [T]
}
class ConcreteStrategyA : Strategy {
func doAlgorithm<T: Comparable>(_ data: [T]) -> [T] {
return data.sorted()
}
}
class ConcreteStrategyB : Strategy {
func doAlgorithm<T: Comparable>(_ data: [T]) -> [T] {
return data.sorted(by: >)
}
}
Implementation
let context = Context(strategy: ConcreteStrategyA())
print("Client: Strategy is set to normal sorting.")
context.doSomeBusinessLogic() // a,b,c,d,e
print("nClient: Strategy is set to reverse sorting.")
context.update(strategy: ConcreteStrategyB())
context.doSomeBusinessLogic() // e,d,c,b,a
References
[1] [Swift-Design Pattern] 스트래티지 패턴 (Strategy
pattern) : http://throughkim.kr/2019/09/04/swift-strategy/
[2] Strategy pattern in Swift : https://medium.com/
flawless-app-stories/strategy-pattern-in-
swift-1462dbddd9fe
[3] Strategy Pattern (with iOS, Swift) : https://
rhammer.tistory.com/347
[4] Design Pattern - Strategy : https://
ehdrjsdlzzzz.github.io/2019/01/18/Design-Pattern-
Strategy/
[5] Strategy in Swift : https://refactoring.guru/design-
patterns/strategy/swift/example
References
[6] Design Patterns with Swift: Quick look at a Strategy
Pattern : https://brightinventions.pl/blog/quick-look-on-a-
strategy-pattern-using-swift/
[7] Design Pattern In Use for iOS Developers: Strategy
Pattern : https://viblo.asia/p/design-pattern-in-use-for-ios-
developers-strategy-pattern-eW65GbWjlDO
[8] The Strategy Pattern in iOS Apps : https://
blog.usejournal.com/the-strategy-pattern-in-ios-
apps-346abc9e86a6
[9] The Strategy Pattern : http://www.thomashanning.com/the-
strategy-pattern/
[10] 전략 패턴 : https://ko.wikipedia.org/wiki/전략_패턴
Thank you!

More Related Content

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] Strategy

  • 3. Strategy Strategy 패턴은 클래스의 행위를 캡슐화 하여 동적으로 행위를 자유롭게 바꿀 수 있도록 돕는 패턴이다. Strategy 패턴은 특정한 계열의 알고리즘(행위) 및 동작을 정의하 고 해당 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만들어 줍니다. 즉 Strategy 패턴은 유연하고 재사용 가능한 객체 지향 소프트웨 어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법으로서 객체는 구현, 변경, 테스트, 재사용이 쉬워야 한다는 것을 잘 반영한 행위(Behavioral) 관련 디자인 패턴 중의 하나입니다.
  • 4. Structure Strategy 패턴을 UML로 도식화하면 아래와 같습니다.
  • 5. Structure Context : Strategy 객체를 소유하고 동적으로 행위를 실행하는 객체 Strategy : ConcreteStrategy 객체의 부모 객체로서 동적으로 지정할 행위에 대한 알고리즘 인터페이스를 정의하는 추상 객체 ConcreteStrategy : 주요 알고리즘 인터페이스 함수에 대한 구현 을 담당하는 객체
  • 6. Implementation 구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다. class Context { private var strategy: Strategy init(strategy: Strategy) { self.strategy = strategy } func update(strategy: Strategy) { self.strategy = strategy } func doSomeBusinessLogic() { let result = strategy.doAlgorithm(["a", "b", "c", "d", "e"]) print(result.joined(separator: ",")) } }
  • 7. Implementation protocol Strategy { func doAlgorithm<T: Comparable>(_ data: [T]) -> [T] } class ConcreteStrategyA : Strategy { func doAlgorithm<T: Comparable>(_ data: [T]) -> [T] { return data.sorted() } } class ConcreteStrategyB : Strategy { func doAlgorithm<T: Comparable>(_ data: [T]) -> [T] { return data.sorted(by: >) } }
  • 8. Implementation let context = Context(strategy: ConcreteStrategyA()) print("Client: Strategy is set to normal sorting.") context.doSomeBusinessLogic() // a,b,c,d,e print("nClient: Strategy is set to reverse sorting.") context.update(strategy: ConcreteStrategyB()) context.doSomeBusinessLogic() // e,d,c,b,a
  • 9. References [1] [Swift-Design Pattern] 스트래티지 패턴 (Strategy pattern) : http://throughkim.kr/2019/09/04/swift-strategy/ [2] Strategy pattern in Swift : https://medium.com/ flawless-app-stories/strategy-pattern-in- swift-1462dbddd9fe [3] Strategy Pattern (with iOS, Swift) : https:// rhammer.tistory.com/347 [4] Design Pattern - Strategy : https:// ehdrjsdlzzzz.github.io/2019/01/18/Design-Pattern- Strategy/ [5] Strategy in Swift : https://refactoring.guru/design- patterns/strategy/swift/example
  • 10. References [6] Design Patterns with Swift: Quick look at a Strategy Pattern : https://brightinventions.pl/blog/quick-look-on-a- strategy-pattern-using-swift/ [7] Design Pattern In Use for iOS Developers: Strategy Pattern : https://viblo.asia/p/design-pattern-in-use-for-ios- developers-strategy-pattern-eW65GbWjlDO [8] The Strategy Pattern in iOS Apps : https:// blog.usejournal.com/the-strategy-pattern-in-ios- apps-346abc9e86a6 [9] The Strategy Pattern : http://www.thomashanning.com/the- strategy-pattern/ [10] 전략 패턴 : https://ko.wikipedia.org/wiki/전략_패턴