GoF의 디자인 패턴, 전략 패턴에 대해 알아본다.
해당 글은, 다음의 코드를 기반으로 이해하는 것이 편리합니다.
//
// main.swift
// Strategy
//
// Created by Choiwansik on 2023/02/13.
//
import Foundation
internal func main() {
let printer = SumPrinter()
printer.printValue(with: SimpleSumStrategy(), n: 10)
printer.printValue(with: GaussSumStrategy(), n: 10)
}
main()
//
// SumPrinter.swift
// Strategy
//
// Created by Choiwansik on 2023/02/13.
//
import Foundation
internal class SumPrinter {
internal func printValue(with strategy: SumStrategy, n: Int) {
print("1에서 \(n)까지의 합")
print(strategy.calculate(with: n))
}
}
//
// SumStrategy.swift
// Strategy
//
// Created by Choiwansik on 2023/02/13.
//
import Foundation
internal protocol SumStrategy {
func calculate(with n: Int) -> Int
}
//
// SimpleSumStrategy.swift
// Strategy
//
// Created by Choiwansik on 2023/02/13.
//
import Foundation
internal class SimpleSumStrategy: SumStrategy {
internal func calculate(with n: Int) -> Int {
(1...n).reduce(.zero, +)
}
}
//
// GaussSumStrategy.swift
// Strategy
//
// Created by Choiwansik on 2023/02/13.
//
import Foundation
internal class GaussSumStrategy: SumStrategy {
internal func calculate(with n: Int) -> Int {
(n+1)*n / 2
}
}