전략 패턴(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) {
}
}
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;
public Client(Service service) {
this.service = service;
}
public void doSomething() {
service.execute();
}
}
@Configuration
public class AppConfig {
@Bean
public Service service() {
return new ServiceImpl();
}
@Bean
public Client client() {
return new Client(service());
}
}
차이점
주요 차이점 | 전략 패턴 | 의존성 주입 |
---|
목적 | 알고리즘의 교체를 위해 사용되는 디자인 패턴 | 객체 간의 의존성을 관리하고 주입하는 기술 |
적용 범위 | 특정 동작(알고리즘)을 캡슐화하여 동적으로 교체할 수 있게 하는 데 중점을 둔다 | 전체 시스템의 객체 관계를 관리하여 결합도를 줄이고 유연성을 높이는 데 중점을 둔다 |
사용 방식 | 인터페이스와 이를 구현하는 구체 클래스들을 통해 특정 기능을 동적으로 변경 | 주입기(Injector) 또는 프레임워크(Spring, Guice 등)를 통해 객체의 생명주기와 의존성을 관리 |