GoF์ ๋์์ธ ํจํด, ์ ๋ต ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
- ์คํ ์ค์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
์์
Code
main
//
// 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
//
// 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
//
// SumStrategy.swift
// Strategy
//
// Created by Choiwansik on 2023/02/13.
//
import Foundation
internal protocol SumStrategy {
func calculate(with n: Int) -> Int
}
SimpleSumStrategy
//
// 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
//
// 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
}
}
ํ์ฉ์ฑ
- ์๊ณ ๋ฆฌ์ฆ์ ๋ณํ์ด ํ์ํ ๋ (์ฌ๋ฌ๊ฐ ์ผ ๋)
๊ฒฐ๊ณผ
- ์ฅ์
- ์กฐ๊ฑด๋ฌธ์ ์์จ ์ ์๋ค.
- ์๋ธํด๋์ฑ์ ์ฌ์ฉํ์ง ์์ ์ ์๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ์์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ๊ตฌํ์ ์ ํ์ด ๊ฐ๋ฅํ๋ค.
- ๋จ์
- ํด๋ผ์ด์ธํธ๋ ์๋ก ๋ค๋ฅธ ์ ๋ต๋ค์ ๋ํด ์ดํดํด์ผ ํ๋ค. (์ฅ๋จ์ ์ ๋ํด)
- Strategy์ Context ์ฌ์ด์ ์์ฌ์ํต ์ค๋ฒํค๋๊ฐ ์๊ธด๋ค. ๊ฒฐํฉ๋๊ฐ ๋์์ง ์ ์๋ค.
- ๊ฐ์ฒด์๊ฐ ์ฆ๊ฐํ๋ค.
์๊ฐํด๋ณผ ์
- ์ต์ ํ๊ฐ ํ์ํ ๋ถ๋ถ์ ๋ํด ์ด๋ฐ ํจํด์ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ์ฅ๋จ์ ์ด ๋ช ํํ๋ค๋ฉด, ๊ตฌํ์ฒด๋ฅผ ๋ ๊ฐ ๋๊ณ ์ํฉ์ ๋ฐ๋ผ ์ ํํ๋๋ก ๋ง๋ค๋ฉด ์ข๊ฒ ๋ค.