Strategy 패턴
Strategy 패턴
개요
어떤 클래스의 로직을 특정 상황에 바꾸고 싶을 때, 그 로직을 별도로 분리하는 패턴.
- 조건문 남용 방지할 수 있음.
- 런타임에 객체가 사용하는 로직(함수)를 변경할 수 있음.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 프토토콜 정의
protocol AttackStrategy {
func attack()
}
// 프로토콜을 준수하는 여러 클래스 정의
class SwordAttack: AttackStrategy {
func attack() {
print("검으로 공격!")
}
}
class MagicAttack: AttackStrategy {
func attack() {
print("마법으로 공격!")
}
}
// 프로토콜을 준수하는 클래스를 멤버변수로 가지는 클래스를 정의
class Character {
var strategy: AttackStrategy
init(strategy: AttackStrategy) {
self.strategy = strategy
}
// 주입된 행동 클래스의 함수를 실행
func performAttack() {
strategy.attack()
}
}
1
2
3
4
5
6
7
// 초기화할때 프르토콜 준수 객체를 주입
let warrior = Character(strategy: SwordAttack())
warrior.performAttack() // 검으로 공격!
// 런타임중 새 객체 주입
warrior.strategy = MagicAttack()
warrior.performAttack() // 마법으로 공격!
This post is licensed under CC BY 4.0 by the author.