1. 전략 패턴

특정 상황에서 사용해야 할 알고리즘이 여러개이고, 런타임 도중에 계속 변경해야 하는 경우에 사용하는 패턴

아래 카카오맵을 사용한다고 생각해봅시다. 경로를 찾기를 할 때, 자동차/버스/도보/자전거 총 4가지 방식을 제공!

각 방식마다 경로를 산출하는 알고리즘이 다 다르지만, 경로를 찾는다는 공통적은 기능을 수행합니다!

우리는 동일한 목적으로 하는 경로찾기를 → 인터페이스

그리고 경로를 산출하는 알고리즘을 → 각각 객체로 캡슐화

그리고 각각의 교통수단을 누를 때 ⇒ 클라이언트 객체에 독립적으로 구성했기 때문에 ⇒ 느슨한 연결을 구현 가능!

느슨한 연결을 하면 ⇒ 클라이언트 객체가 알고리즘이 변하게 될 때, 영향을 받지 않게 된다는 것

Untitled

2. 전략 패턴 구성

Context

Concrete Strategy 객체로 구성 → Strategy 객체에 대한 참조를 유지한다 → Strategy가 데이터에 접근 할 수 있는 인터페이스를 정의합니다.

// Context
class Navigation {
    private var routeAlgorithm: Strategy?
    
    func execute() {
        self.routeAlgorithm?.algorithmExecute()
    }
    
    func setStrategy(strategy: Strategy) {
        self.routeAlgorithm = strategy
    }
}

Strategy