전략 패턴이란?
전략 패턴(Strategy Pattern)은 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화된 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다.
예를 들면 유저가 결제방식을 결정할 때 '신용카드', '카카오페이', '현금' 등 여러가지 방법으로 결제를 하게된다.
public interface Payment {
void pay(int amount);
}
일단 amount만큼의 금액을 지불한다는 pay() 추상 메소드를 Payment 인터페이스에 구현한다.
public class KakaoPayment implements Payment {
@Override
public void pay(int amount) {
System.out.println(amount + "원을 카카오페이로 지불합니다.");
}
}
public class CreditCardPayment implements Payment {
@Override
public void pay(int amount) {
System.out.println(amount + "원을 신용카드로 지불합니다.");
}
}
public class CashPayment implements Payment {
@Override
public void pay(int amount) {
System.out.println(amount + "원을 현금으로 지불합니다.");
}
}
이렇게 결제방식(Payment)를 구현해 줄 수 있는 전략들(구현체)을 구현해준다. 그 때 각각 구현체마다 pay()의 내용들이 다르다.
public class Main {
public static void main(String[] args) {
Payment kakao;
kakao = new KakaoPayment();
Payment creditCard;
creditCard = new CreditCardPayment();
Payment cash;
cash = new CashPayment();
kakao.pay(300); // 300원을 카카오페이로 지불합니다.
creditCard.pay(400); // 400원을 신용카드로 지불합니다.
cash.pay(500); // 500원을 현금으로 지불합니다.
}
}
전략 패턴의 장점
- 행위(알고리즘)를 캡슐화하여 분리할 수 있다
- Payment 인터페이스를 통해 결제 방식이라는 공통적인 행위를 정의하고, 각 구현체는 개별 전략으로 캡슐화 됨
- 기존 코드를 수정하지 않고 새로운 전략을 추가할 수 있다
- 예를 들어 ApplePayPayment라는 새로운 결제 방식을 도입하려면 기존 코드를 건드릴 필요 없이 Payment 인터페이스만 구현하면 됨
- OCP(개방-폐쇄 원칙)를 잘 지킴
전략 패턴의 단점
- 클래스 수가 많아진다.
- 결제 방식 하나마다 별도의 클래스를 만들어야 하기 때문에 전략이 많아질수록 클래스 수가 증가하여 관리가 어려울 수 있다.
'JAVA' 카테고리의 다른 글
[JAVA] 프록시 패턴(Proxy Pattern)과 데코레이터 패턴(Decorator Pattern) (0) | 2025.06.10 |
---|---|
[JAVA] 옵저버 패턴(Observer Pattern)이란? (0) | 2025.05.23 |
[JAVA] 팩토리 패턴(Factory Pattern)이란? (0) | 2025.05.22 |
[JAVA] 싱글톤 패턴(Singleton Pattern)이란? (0) | 2025.05.20 |
[JAVA] 예외클래스와 예외처리 (2) | 2024.12.08 |