🤖

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

⚠️

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

이미지 로딩 중...

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

AI Generated

2025. 11. 3. · 12 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)

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

함께 보면 좋은 카드 뉴스

마이크로서비스 배포 완벽 가이드

Kubernetes를 활용한 마이크로서비스 배포의 핵심 개념부터 실전 운영까지, 초급 개발자도 쉽게 따라할 수 있는 완벽 가이드입니다. 실무에서 바로 적용 가능한 배포 전략과 노하우를 담았습니다.

Application Load Balancer 완벽 가이드

AWS의 Application Load Balancer를 처음 배우는 개발자를 위한 실전 가이드입니다. ALB 생성부터 ECS 연동, 헬스 체크, HTTPS 설정까지 실무에 필요한 모든 내용을 다룹니다. 초급 개발자도 쉽게 따라할 수 있도록 단계별로 설명합니다.

고객 상담 AI 시스템 완벽 구축 가이드

AWS Bedrock Agent와 Knowledge Base를 활용하여 실시간 고객 상담 AI 시스템을 구축하는 방법을 단계별로 학습합니다. RAG 기반 지식 검색부터 Guardrails 안전 장치, 프론트엔드 연동까지 실무에 바로 적용 가능한 완전한 시스템을 만들어봅니다.

에러 처리와 폴백 완벽 가이드

AWS API 호출 시 발생하는 에러를 처리하고 폴백 전략을 구현하는 방법을 다룹니다. ThrottlingException부터 서킷 브레이커 패턴까지, 실전에서 바로 활용할 수 있는 안정적인 에러 처리 기법을 배웁니다.

AWS Bedrock 인용과 출처 표시 완벽 가이드

AWS Bedrock의 Citation 기능을 활용하여 AI 응답의 신뢰도를 높이는 방법을 배웁니다. 출처 추출부터 UI 표시, 검증까지 실무에서 바로 사용할 수 있는 완전한 가이드입니다.