전략 패턴과 DI의 차이

이강용·2024년 6월 5일
0

CS

목록 보기
35/109

전략 패턴(Strategy Pattern)

  • 알고리즘이나 로직을 클래스 계층으로 캡슐화하여 런타임에 동적으로 교체할 수 있도록 한다.
  • 특정 기능을 구현하는 여러 알고리즘을 정의하고 클라이언트가 필요에 따라 이러한 알고리즘을 선택할 수 있게 한다.
interface PaymentStrategy {
    void pay(int amount);
}

class CreditCardPayment implements PaymentStrategy {
    public void pay(int amount) {
        // 신용카드 결제 로직
    }
}

class PayPalPayment implements PaymentStrategy {
    public void pay(int amount) {
        // PayPal 결제 로직
    }
}

class ShoppingCart {
    private PaymentStrategy paymentStrategy;

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

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

의존성 주입(Dependency Injection, DI)

  • 객체 간의 의존성을 주입하여 코드의 결합도를 나주고 테스트 가능성을 높인다.
  • 객체의 생성 및 초기화를 외부에서 관리하여 유연하고 확장 가능한 설계를 가능하게 한다
interface Service {
    void execute();
}

class ServiceImpl implements Service {
    public void execute() {
        // 서비스 로직
    }
}

class Client {
    private Service service;

    // 생성자 주입 (Constructor Injection)
    public Client(Service service) {
        this.service = service;
    }

    public void doSomething() {
        service.execute();
    }
}

// 의존성 주입 예시 (Spring 프레임워크 사용)
@Configuration
public class AppConfig {
    @Bean
    public Service service() {
        return new ServiceImpl();
    }

    @Bean
    public Client client() {
        return new Client(service());
    }
}

차이점

주요 차이점전략 패턴의존성 주입
목적알고리즘의 교체를 위해 사용되는 디자인 패턴객체 간의 의존성을 관리하고 주입하는 기술
적용 범위특정 동작(알고리즘)을 캡슐화하여 동적으로 교체할 수 있게 하는 데 중점을 둔다전체 시스템의 객체 관계를 관리하여 결합도를 줄이고 유연성을 높이는 데 중점을 둔다
사용 방식인터페이스와 이를 구현하는 구체 클래스들을 통해 특정 기능을 동적으로 변경주입기(Injector) 또는 프레임워크(Spring, Guice 등)를 통해 객체의 생명주기와 의존성을 관리
profile
HW + SW = 1

0개의 댓글