Posts [개발자 블로그] 스프링 의존성 주입과 인터페이스
Post
Cancel

[개발자 블로그] 스프링 의존성 주입과 인터페이스

Spring을 활용하여 개발하면서 꼭 인터페이스 타입으로 의존성을 주입받아야 하는지에 대해 생각해보게 되었다.
(CustomerService인터페이스를 만들고 CustomerServiceImpl을 구현한 후 인터페이스 타입으로 주입받는 것 처럼)

SOLID원칙 중 OCP에 따르면 변화에 유연하게 대처할 수 있도록 인터페이스 타입으로 주입 받는 것이 맞지만 쓸데없이 클래스가 많아지고 코드만 복잡해지는게 아닌가 하는 생각이 들었다. 구글링을 통해 다른 사람들의 의견을 찾아보며 아래의 글을 읽어보게 되었다.

요약하면, OCP에 기반한 전략 패턴에 따라 인터페이스로 주입받음으로써 Controller와 Service간의 결합도를 떨어뜨리며 설계하여 클래스들의 기능 분리와 확장성을 추구하는게 맞다. 하지만, 이는 설계의 영역일 뿐이다.

즉, 두 클래스의 기능이 의존적이라 한쪽이 바뀔 때 다른 한쪽도 바껴야하는 구조라면 굳이 인터페이스를 사용해 전략 패턴을 구사하지 않아도 된다는 것이다. 또 굳이 향후 확장성을 고려하지 않아도 되는 서비스라면 굳이 전략 패턴을 사용할 이유도 없다.

내가 생각했던 것처럼 인터페이스를 미리 완벽하게 작성해서 사용하는 것은 현실적으로 어렵고 구현체를 만들면서 역으로 인터페이스를 계속 수정하는 일이 발생하는데, 기능 확장이 없을때 굳이 이런 과정을 반복하는 것은 의미가 없다.

This post is licensed under CC BY 4.0 by the author.