WEB/Spring

스프링에서 Service ServiceImpl 사용하는 이유

대전집주인 2024. 3. 23. 17:11
728x90
SMALL

스프링에서 Service 인터페이스와 ServiceImpl로 구현하는 구조를 사용한 경우를 자주 볼 수 있다.
이와 같은 사용 방법은 스프링의 의존성 주입(DI)에 관련 인터페이스를 구현하는것과 연관이 깊다.



Service 인터페이스와 ServiceImpl 구조로 사용하는 이유

 

1. 객체 간의 결합도를 낮추어 유연한 개발을 하기위함, 하나의 인터페이스를 구현 다형성을 줌으로서 하나의 인터페이스만 바라보지 않게 의존관계를 줄일 수 있다.
2. Spring의 AOP Proxy를 만들기 위함, @Transactional 어노테이션 같은 경우 인터페이스가 존재해야지만 동작할수 있기에 필요하다.(AOP는 기본적으로 Dynamic Proxy를 사용 이같은 경우 인터페이스 기반으로 동작, CGLIB를 사용할경우는 예외 )


꼭 인터페이스를 분리하여 사용해야하는가?

 

스프링의 싱글톤, 인터페이스와 구현체를 분리 등 스프링이 제시하는 방법이지만 실제 프로젝트는 인터페이스와 1:1 관계인 경우가 더 많고 그로인한 무분별한 인터페이스 생성과 소스의 크기 구분할수 없는 메소드 등 스프링이 제시하는 방법을 사용하지 못하는 경우가 대부분이다.

 

Service 인터페이스를 사용하거나 ServiceImpl이 미존재 인터페이스 없이 사용하는건 이전부터 관습적으로 사용하던 방식이 아닌 미래를 위한 설계를 준비해야한다. 당장은 1:1 관계를 맺고있을지 몰라도 추후에 서비스가 커짐으로 구현체방식으로 유연하게 대처할수 있어야 한다.

 

참조

 

Service와 ServiceImpl 구조에 대해서

스프링에 대해 공부하면서 그리고 프로젝트를 진행해보고 여러 예제 코드들을 접해보면서 느낀 것은 관습적으로 브릿지 패턴을 이용한 추상화를 사용하고 있다는 점입니다. 관습적인 추상화

see-one.tistory.com

 

728x90
LIST