[Spring] 구현 클래스가 아닌 인터페이스에 DI(의존성 주입)하는 이유
coco3o
회사 코드를 보다가 인터페이스를 @Autowired 하여 사용하는 것을 보고"왜 구현 클래스가 아닌 인터페이스에 DI(Dependency Injection) 하는거지?" 하는 의문이 들어 찾아보았다.결론부터 얘기하면 구현 클래스가 아닌 인터페이스를 의존하는 것은 객체지향 설계원칙(SOLID) 중 개방 폐쇄의 원칙(OCP)과 의존성 역전 원칙(DIP)을 기반한 전략 패턴이었다.※ 전략 패턴 ? 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말한다. 즉, 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동..