해결된 질문
작성
·
22
·
수정됨
0
강사님 안녕하세요, 강의 내용과 관련해 질문드리고자 합니다.
이전에 질문글에서 아래와 같이 답변을 주신 적이 있는데요.
음.. 근데 그렇게 이해하시면 안됩니다. 의존성 주입도 하나의 디자인 패턴입니다. 전략패턴도 디자인패턴이구요. 두 개가 다르다. 라고 이해하시면 되구요. 다만 이런 것은 있습니다. 전략패턴을 만들 때 의존성주입을 통해 전략패턴을 만들기도 하고 그런거 없이 전략패턴을 만들기도 합니다.
이 답변을 읽기 이전에, 강의를 처음 들으면서 의존성 주입의 인젝터가 전략 패턴으로 사용될 수도 있겠다라고 이해했는데,
답변 주신 내용은 전략 패턴을 구현할 때 의존성 주입이 활용될 수 있다라는 의미로 말씀해주신 것 같았습니다.
혹시 제가 관계를 잘못 파악하고 있는 걸까요?
제가 말씀드린 내용과 강사님께서 말씀해주신 내용이 같은 의미인지 궁금합니다.
또는 양방향으로 활용될 수 있는데 일반적으로는 말씀해주신 것처럼 ‘전략 패턴을 만들 때 의존성 주입이 활용된다’라고 이해하는 것이 맞을까요?
+++추가.
GPT로 부터는 두 경우가 모두 가능하고 말씀주신 내용이 더 일반적인 것으로 답변을 받았는데 아래와 같이 이해해도 될까요?.
비지니스 로직 실행 도중 전략이 결정된다. → (런타임) Strategy with DI ← 이 경우 결합돼도 일단 큰틀에서 전략패턴이라고 부른다.
환경/테넌트별로 한 전략만 쓴다 → (부트스트랩) DI with Strategy ← 이 경우 결합돼도 일단 큰틀에서 의존성 주입이라고 부른다.
답변 2
0
안녕하세요 ㅎㅎ
답변 주신 내용은 전략 패턴을 구현할 때 의존성 주입이 활용될 수 있다라는 의미로 말씀해주신 것 같았습니다.
-> 네 맞습니다.
‘전략 패턴을 만들 때 의존성 주입이 활용된다’라고 이해하는 것이 맞을까요?
-> 활용될 수 있습니다.
예를 들어 다음과 같이 전략패턴을 구축해도(의존성 주입X) 전략패턴이라고 볼 수 있습니다.
public void selectStrategy(String key) {
switch (key) {
case "kakao":
this.strategy = new KakaoCardStrategy();
break;
case "luna":
this.strategy = new LunaCardStrategy();
break;
default:
throw new IllegalArgumentException("Unknown strategy: " + key);
}
}
비지니스 로직 실행 도중 전략이 결정된다. → (런타임) Strategy with DI ← 이 경우 결합돼도 일단 큰틀에서 전략패턴이라고 부른다.
-> 아닙니다. 실행전, 도중에 전략이 결정되어도 전략패턴인 경우가 있습니다.
전략패턴이란 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 디자인 패턴입니다.
라는게 중요합니다.
실행 도중
PaymentStrategy strategy = chooseStrategy(userInput);
cart.pay(strategy); // 런타임에 전략이 주입됨
실행 전에 고정
지금 보면 payment만 들어가는 걸 알 수가 있고, 저기서 만약 카카오페이나 네이버페이가 고정되어있고 런타임교체가 없다면 실행전 전략은 고정됩니다.
그러나 구조차제가 교체가능성이 보장되어있기 때문에 이 또한 전략패턴이라 할 수 있습니다.
public class OrderService {
private final PaymentStrategy payment; // 인터페이스에 의존
public OrderService(PaymentStrategy payment) { this.payment = payment; }
}
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. patjuk님.
전략패턴과 의존성 주입에 관한 이해를 돕고자 관련된 내용을 설명드리겠습니다.
우선, 의존성 주입(Dependency Injection)은 객체 간의 의존 관계를 제어의 역전을 통해 외부에서 주입하는 디자인 패턴입니다. 이는 객체의 구성을 유연하게 하고, 코드의 유지보수성을 높이기 위해 많이 활용됩니다.
반면에, 전략 패턴(Strategy Pattern)은 특정 행동을 선택할 수 있도록 인터페이스를 정의하고, 다양한 전략으로 구현체들을 통해 실행할 수 있는 패턴입니다. 이는 주로 동적인 행동 선택을 가능하게 하여 확장성을 높이는 데 도움을 줍니다.
귀하의 이해에서 언급한 바와 같이, 전략 패턴을 구현할 때 의존성 주입을 활용하여 전략 객체를 주입할 수 있습니다. 즉, 전략 패턴을 보다 유연하게 사용하기 위해 의존성 주입이 활용될 수 있다는 것입니다. 주입된 객체를 통해 다양한 전략이 선택되고 실행될 수 있기 때문입니다.
따라서,
- 전략 패턴을 구현하는 과정에서 의존성 주입을 통해 전략을 넣을 수 있는 구조를 취한다면, 이는 전략 패턴의 다양한 사례로 볼 수 있습니다.
- 말씀하신 “의존성 주입의 인젝터가 전략 패턴으로 사용될 수 있다” 라는 관점은 다소 혼동의 여지가 있는데, 의존성 주입이 전략 그 자체라기 보다는, 전략을 주입받는 메커니즘으로 작용한다고 보는 것이 맞을 것 같습니다.
다음 유사한 논의에 대한 답변을 참고하시면 좀 더 이해에 도움이 되실 겁니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.