[design pattern] strategy pattern

히니·2025년 7월 30일

CS전공노트

목록 보기
3/5

전략 패턴이란?

객체의 행위를 바꾸고 싶을때 직접 바꾸지 않고 캡슐화한 객체의 행동을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능한 패턴이다.

책에서 예시를 드는 표현은 페이였다. 우리가 물건을 살때 쇼핑, pay는 수단인데 카카오페이를 쓰냐 네이버 페이를 쓰냐 사실 쇼핑몰 입장에서는 결제방식을 알 필요도 없고 관심도 없다.또한 새로운 결제방식이 추가가 되더라도 기존코드 수정없이 전략만 수정하면 된다.

그렇다면 전략 패턴을 왜 쓰는가?
전략 패턴은 사용하고 싶을때는 같은 기능을 하지만 방법이 여러가지 일때, 코드안에서 분기 처리하지 않고 전략객체를 사용해서 유연하게 교체하고 싶을때 사용한다.

전략패턴 예제


// 1. 결제 전략 인터페이스 정의
interface PaymentStrategy {
  pay(amount: number): void;
}

// 2. KakaoPay 전략 클래스
class KakaoPay implements PaymentStrategy {
  pay(amount: number): void {
    console.log(`KakaoPay로 ${amount}원 결제합니다.`);
  }
}

// 3. NaverPay 전략 클래스
class NaverPay implements PaymentStrategy {
  pay(amount: number): void {
    console.log(`NaverPay로 ${amount}원 결제합니다.`);
  }
}

// 4. 결제를 처리하는 컨텍스트 클래스
class ItemPurchase {
  private paymentStrategy: PaymentStrategy;

  constructor(paymentStrategy: PaymentStrategy) {
    this.paymentStrategy = paymentStrategy;
  }

  setPaymentStrategy(paymentStrategy: PaymentStrategy): void {
    this.paymentStrategy = paymentStrategy;
  }

  buy(amount: number): void {
    this.paymentStrategy.pay(amount);
  }
}

사용 예시는 아래와 같다


const purchase = new ItemPurchase(new KakaoPay());
purchase.buy(10000); // KakaoPay로 10000원 결제합니다.

purchase.setPaymentStrategy(new NaverPay());
purchase.buy(20000); // NaverPay로 20000원 결제합니다.
profile
안녕하세요

0개의 댓글