Service와 ServiceImpl

ddssu·2022년 3월 8일
0
post-thumbnail

회사에서 spring을 사용하면서 생긴 의문.
프로젝트에서 사용중인 spring 구조
1.Controller Service ServiceImpl DAO SQL
2.ServiceImpl DAO SQL
보기 쉬운건 2번이다. 처음 입사할 때부터 모르는 코드를 하나씩 다 찾아보면서 유지보수를 진행해보니 2번이 더 알아보기 쉬웠고 코드를 찾아가기도 쉬웠다.

그래서 오늘은 평소에 계속 의문이었던 1번 구조에 대해 왜 이렇게 사용하는지 정리해보려고 한다.

#. Spring MVC

코드가 동작할 때 위와 같은 순서로 진행된다.
대부분의 프로젝트는 Service를 인터페이스로 설계하고 ServiceImpl에서 실제로 사용하기 위해 구현체를 생성해서 사용하는 방식으로 설계된다고 한다.

-> 추상화를 통한 구현 방식
객체지향의 특징 중 하나인 다형성과
객체지향의 다섯 가지 원칙 중 하나인 *OCP 원칙을
가장 잘 실현해주는 설계 방식

*OCP (Open Closed Principle)
개방, 폐쇄 원칙이라고 하며 '소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.'는 프로그래밍 원칙입니다.

#. 추상화가 꼭 필요한건가

목적. 인터페이스와 구현체를 분리함으로써
1) 구현체를 독립적으로 확장 가능
2) 구현체 클래스를 변경하거나 확장하여도 이를 사용하는 클라이언트 코드에 영향을 주지 않기 위함

단점. (이 글을 쓰게 된 이유)
1) 코드 구조가 복잡
2) 인터페이스를 거쳐 구현체를 확인해야하는 번거로움

결론.
1) 인터페이스와 구현체가 1:1의 관계인 경우에는 굳이 추상화를 사용 할 필요가 없다.
2) 서비스 확장을 위해 추상화를 통하여 1:N의 방식으로 구조를 변경 할 수 있다.

*참고자료
https://multifrontgarden.tistory.com/97
https://see-one.tistory.com/1
https://wildeveloperetrain.tistory.com/49

0개의 댓글