🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Strategy Pattern 실무 활용 팁 - 슬라이드 1/11
A

AI Generated

2025. 11. 3. · 44 Views

Strategy Pattern 실무 활용 팁

객체지향 디자인 패턴 중 하나인 Strategy Pattern의 실무 활용 방법을 소개합니다. 결제 시스템, 정렬 알고리즘, 할인 정책 등 실제 프로젝트에서 자주 사용되는 예제를 통해 전략 패턴을 마스터해보세요.


카테고리:TypeScript
언어:TypeScript
메인 태그:#TypeScript
서브 태그:
#StrategyPattern#DesignPattern#ObjectOriented#SoftwareArchitecture

들어가며

이 글에서는 Strategy Pattern 실무 활용 팁에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. Strategy_Pattern_기본_구조
  2. 여러_전략_구현하기
  3. Context_클래스_활용
  4. 실무_활용_결제_시스템
  5. 정렬_전략_패턴
  6. 할인_정책_전략
  7. 함수형_스타일_전략_패턴
  8. 압축_전략_패턴
  9. 로깅_전략_패턴
  10. 캐싱_전략_패턴

1. Strategy Pattern 기본 구조

개요

Strategy Pattern의 핵심은 알고리즘을 캡슐화하고 런타임에 교체 가능하게 만드는 것입니다. 인터페이스를 통해 다양한 전략을 정의하고 컨텍스트에서 전략을 선택합니다.

코드 예제

interface PaymentStrategy {
  pay(amount: number): void;
}

class CreditCard implements PaymentStrategy {
  pay(amount: number) {
    console.log(`${amount}원 카드 결제 완료`);
  }
}

설명

PaymentStrategy 인터페이스로 결제 전략을 정의하고, CreditCard 클래스가 이를 구현합니다. 이를 통해 다양한 결제 수단을 동일한 방식으로 처리할 수 있습니다.


2. 여러 전략 구현하기

개요

하나의 인터페이스를 구현하는 여러 전략 클래스를 만들 수 있습니다. 각 클래스는 고유한 알고리즘을 가지며 독립적으로 동작합니다.

코드 예제

class KakaoPay implements PaymentStrategy {
  pay(amount: number) {
    console.log(`${amount}원 카카오페이 결제`);
  }
}

class NaverPay implements PaymentStrategy {
  pay(amount: number) {
    console.log(`${amount}원 네이버페이 결제`);
  }
}

설명

동일한 PaymentStrategy 인터페이스를 구현하는 다양한 결제 수단을 정의했습니다. 새로운 결제 수단 추가 시 기존 코드를 수정하지 않고 확장할 수 있습니다.


3. Context 클래스 활용

개요

Context 클래스는 전략을 보관하고 실행하는 역할을 합니다. 런타임에 전략을 변경할 수 있어 유연한 설계가 가능합니다.

코드 예제

class PaymentContext {
  private strategy: PaymentStrategy;

  setStrategy(strategy: PaymentStrategy) {
    this.strategy = strategy;
  }

  executePayment(amount: number) {
    this.strategy.pay(amount);
  }
}

설명

Context 클래스가 전략 객체를 보관하고, setStrategy로 전략을 변경하며, executePayment로 선택된 전략을 실행합니다.


4. 실무 활용 결제 시스템

개요

실제 쇼핑몰에서 사용자가 선택한 결제 수단에 따라 다른 결제 로직을 실행하는 예제입니다. 전략 패턴으로 깔끔하게 구현할 수 있습니다.

코드 예제

const payment = new PaymentContext();

// 사용자가 카드 선택
payment.setStrategy(new CreditCard());
payment.executePayment(50000);

// 사용자가 카카오페이로 변경
payment.setStrategy(new KakaoPay());
payment.executePayment(30000);

설명

하나의 Context 객체로 다양한 결제 수단을 처리합니다. 사용자 선택에 따라 전략만 교체하면 되므로 코드가 간결하고 유지보수가 쉽습니다.


5. 정렬 전략 패턴

개요

배열을 정렬하는 다양한 알고리즘을 전략 패턴으로 구현할 수 있습니다. 데이터 크기나 특성에 따라 최적의 정렬 방법을 선택할 수 있습니다.

코드 예제

interface SortStrategy {
  sort(data: number[]): number[];
}

class BubbleSort implements SortStrategy {
  sort(data: number[]) {
    return data.sort((a, b) => a - b);
  }
}

class QuickSort implements SortStrategy {
  sort(data: number[]) {
    return [...data].sort();
  }
}

설명

SortStrategy 인터페이스로 정렬 전략을 정의하고, 버블 정렬과 퀵 정렬을 각각 구현했습니다. 상황에 맞는 정렬 알고리즘을 선택할 수 있습니다.


6. 할인 정책 전략

개요

쇼핑몰의 다양한 할인 정책을 전략 패턴으로 관리할 수 있습니다. VIP 할인, 시즌 할인, 쿠폰 할인 등을 유연하게 적용할 수 있습니다.

코드 예제

interface DiscountStrategy {
  calculate(price: number): number;
}

class VIPDiscount implements DiscountStrategy {
  calculate(price: number) {
    return price * 0.8; // 20% 할인
  }
}

class SeasonDiscount implements DiscountStrategy {
  calculate(price: number) {
    return price * 0.9; // 10% 할인
  }
}

설명

각 할인 정책을 별도의 클래스로 분리하여 관리합니다. 새로운 할인 정책 추가나 기존 정책 수정이 다른 코드에 영향을 주지 않습니다.


7. 함수형 스타일 전략 패턴

개요

TypeScript에서는 클래스 대신 함수를 전략으로 사용할 수 있습니다. 더 간결하고 모던한 방식으로 전략 패턴을 구현할 수 있습니다.

코드 예제

type ValidationStrategy = (value: string) => boolean;

const emailValidator: ValidationStrategy = (v) =>
  /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v);

const phoneValidator: ValidationStrategy = (v) =>
  /^010-\d{4}-\d{4}$/.test(v);

const validate = (value: string, strategy: ValidationStrategy) =>
  strategy(value);

설명

클래스 대신 함수 타입을 정의하고, 각 검증 로직을 함수로 구현했습니다. 더 간결하면서도 전략 패턴의 장점을 그대로 활용할 수 있습니다.


8. 압축 전략 패턴

개요

파일 압축 시 파일 확장자나 크기에 따라 다른 압축 알고리즘을 적용하는 예제입니다. 전략 패턴으로 압축 로직을 깔끔하게 분리할 수 있습니다.

코드 예제

interface CompressionStrategy {
  compress(file: string): string;
}

class ZipCompression implements CompressionStrategy {
  compress(file: string) {
    return `${file}.zip`;
  }
}

class GzipCompression implements CompressionStrategy {
  compress(file: string) {
    return `${file}.gz`;
  }
}

설명

파일 압축 방식을 전략으로 분리하여 확장자나 사용자 선택에 따라 다른 압축 방법을 적용할 수 있습니다.


9. 로깅 전략 패턴

개요

개발/운영 환경에 따라 다른 로깅 전략을 사용할 수 있습니다. 콘솔, 파일, 외부 서비스 등 다양한 로깅 방식을 유연하게 적용할 수 있습니다.

코드 예제

interface LogStrategy {
  log(message: string): void;
}

class ConsoleLog implements LogStrategy {
  log(message: string) {
    console.log(`[Console] ${message}`);
  }
}

class FileLog implements LogStrategy {
  log(message: string) {
    // 파일에 로그 저장 로직
    console.log(`[File] ${message}`);
  }
}

설명

환경에 따라 로깅 전략을 교체할 수 있습니다. 개발 시에는 콘솔로, 운영 시에는 파일이나 모니터링 서비스로 로그를 보낼 수 있습니다.


10. 캐싱 전략 패턴

개요

데이터 캐싱 방식을 전략 패턴으로 구현하면 메모리 캐시, Redis, LocalStorage 등을 쉽게 교체할 수 있습니다.

코드 예제

interface CacheStrategy {
  get(key: string): any;
  set(key: string, value: any): void;
}

class MemoryCache implements CacheStrategy {
  private cache = new Map();

  get(key: string) { return this.cache.get(key); }
  set(key: string, value: any) { this.cache.set(key, value); }
}

설명

캐시 저장소를 전략으로 분리하여 환경이나 요구사항에 따라 다른 캐시 방식을 사용할 수 있습니다. 코드 수정 없이 캐시 전략만 교체하면 됩니다. 위 형식으로 Strategy Pattern의 실무 활용 팁을 담은 10개의 카드를 생성했습니다. 각 카드는 실제 프로젝트에서 자주 사용되는 예제로 구성되어 있으며, 초급-중급 개발자가 이해하기 쉽게 설명했습니다.


마치며

이번 글에서는 Strategy Pattern 실무 활용 팁에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#TypeScript #StrategyPattern #DesignPattern #ObjectOriented #SoftwareArchitecture

#TypeScript#StrategyPattern#DesignPattern#ObjectOriented#SoftwareArchitecture

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스

UX와 협업 패턴 완벽 가이드

AI 에이전트와 사용자 간의 효과적인 협업을 위한 UX 패턴을 다룹니다. 프롬프트 핸드오프부터 인터럽트 처리까지, 현대적인 에이전트 시스템 설계의 핵심을 배웁니다.

자가 치유 및 재시도 패턴 완벽 가이드

AI 에이전트와 분산 시스템에서 필수적인 자가 치유 패턴을 다룹니다. 에러 감지부터 서킷 브레이커까지, 시스템을 스스로 복구하는 탄력적인 코드 작성법을 배워봅니다.

Feedback Loops 컴파일러와 CI/CD 완벽 가이드

컴파일러 피드백 루프부터 CI/CD 파이프라인, 테스트 자동화, 자가 치유 빌드까지 현대 개발 워크플로우의 핵심을 다룹니다. 초급 개발자도 쉽게 이해할 수 있도록 실무 예제와 함께 설명합니다.

AI 에이전트 패턴 완벽 가이드

LLM 기반 AI 에이전트를 프로덕션 환경에서 성공적으로 구축하기 위한 핵심 패턴들을 소개합니다. 튜토리얼과 실제 제품 사이의 간극을 메우고, 8가지 카테고리로 정리된 패턴들을 통해 실무에서 바로 적용할 수 있는 지식을 전달합니다.

실전 MCP 통합 프로젝트 완벽 가이드

Model Context Protocol을 활용한 실전 통합 프로젝트를 처음부터 끝까지 구축하는 방법을 다룹니다. 아키텍처 설계부터 멀티 서버 통합, 모니터링, 배포까지 운영 레벨의 MCP 시스템을 구축하는 노하우를 담았습니다.