# 전략 패턴
- 객체의 행위를 동적으로 변경하고 싶은 경우, 코드를 직접 수정하는 것이 아닌 추상화된 전략의 구현만을 바꿔 행위를 변경하는 디자인 패턴
- 즉 런타임 시점에 선택이 가능해야 하는게 특징
# 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를 선언하고 이를 구현한 전략을 주입받도록 구현하면 유연하게 인증 전략을 교체할 수 있음