개발을 하다 보면, “무언가를 쉽게 교체하고 싶다”라는 욕구가 자주 생긴다. 이럴 때 많이 언급되는 개념이 바로 전략 패턴과 의존성 주입(DI) 이다.
둘 다 쉽게 교체가 가능하다는 점에서 비슷하게 느껴질 수 있다. 하지만 본질적으로 목적과 사용 방식, 그리고 적용되는 맥락이 다르다.
전략 패턴은 행위(Behavior)에 기반한 디자인 패턴이다.
어떤 컨텍스트(Context) 안에서 알고리즘(혹은 행위)을 런타임에 쉽게 교체할 수 있도록 도와준다.
즉, 인터페이스를 통해 여러 전략(알고리즘, 행위 등)을 정의하고, 실제 사용하는 쪽에서는 구체적인 전략이 아니라 추상화된 전략 인터페이스에만 의존하게 된다.
필요할 때 전략을 갈아끼우듯이 교체할 수 있다.
예를 들어, 결제 방식을 신용카드, 카카오페이, 네이버페이 등으로 자유롭게 바꿔서 사용할 수 있다.
의존성 주입은 어떤 객체가 사용할 의존성을 직접 생성하지 않고, 외부에서 주입받는 방식이다.
쉽게 말해, 클래스 안에서 직접 new로 생성하지 않고, 누군가(프레임워크, 팩토리, 외부 코드 등)가 대신 만들어서 넣어주는 구조다.
이 역시 “무언가를 쉽게 교체한다”는 점에서 전략 패턴과 비슷해 보인다.
의존성을 바꿔치기하거나, 테스트용 목 객체로 교체할 때도 유용하다.
둘 다 “교체 가능성”이라는 공통점이 있다.
하지만 목적과 역할이 다르다.
전략 패턴은 GoF(Design Patterns)에서 정의된 명확한 패턴 중 하나다.
의존성 주입은 디자인 패턴이라기보다는 설계 원칙 또는 구조에 가깝다.