# 전략 패턴

  • 객체의 행위를 동적으로 변경하고 싶은 경우, 코드를 직접 수정하는 것이 아닌 추상화된 전략의 구현만을 바꿔 행위를 변경하는 디자인 패턴
  • 즉 런타임 시점에 선택이 가능해야 하는게 특징

# ex) 전략 패턴을 사용한 인증 기능

// 전략 인터페이스
interface SignupStrategy {
    void signup(String userInfo);
}

// 카카오 회원가입 구현
class KakaoSignup implements SignupStrategy {
    @Override
    public void signup(String userInfo) {...}
}

// 네이버 회원가입 구현
class NaverSignup implements SignupStrategy {
    @Override
    public void signup(String userInfo) {...}
}

// 구글 회원가입 구현
class GoogleSignup implements SignupStrategy {
    @Override
    public void signup(String userInfo) {...}
}

// 회원가입 서비스
class SignupService {

    public void signup(String userInfo, SignupStrategy strategy) {
        strategy.signup(userInfo);
    }
}
  • 주어진 플랫폼(카카오, 네이버, 구글)에 따라 회원가입을 결정하는 요구사항에 대해, 위 코드처럼 SignupStrategy를 선언하고 이를 구현한 전략을 주입받도록 구현하면 유연하게 인증 전략을 교체할 수 있음