티끌모아 태산
Spring에서 Service interface와 ServiceImpl class 구조를 사용하는 이유? 본문
오늘 팀장님께서 물으셨는데 그 이유를 설명하지 못했다.
https://wildeveloperetrain.tistory.com/49
관습적인 추상화 Service, ServiceImpl 구조를 사용해야 할까?
Service interface와 ServiceImpl class 구조를 사용하는 이유? 대부분의 프로젝트는 Service를 만들 때 MemberService와 같이 서비스를 인터페이스로 설계하고, MemberServiceImpl 라는 구현체인 클래스를 생성..
wildeveloperetrain.tistory.com
여기에 그 답이 나와있다.
이론상으로 위와 같은 Service, ServiceImpl 패턴으로 설계를 해야하는 이유는 인터페이스와 구현체를 분리함으로써 구현체를 독립적으로 확장할 수 있으며, 구현체 클래스를 변경하거나 확장해도 이를 사용하는 클라이언트의 코드에 영향을 주지 않도록 하기 위함입니다.
함께 알면 이해하기 좋은 MVC 패턴에서 Service Model의 역할
MVC 패턴에서 view는 자신이 요청할 Controller만 알고 있으면 되고, Controller는 화면에서 넘어오는 매개변수들을 이용해 Service객체를 호출하는 역할을 합니다.
Service는 불필요하게 Http 통신을 위한 HttpServlet을 상속받을 필요 없는 순수한 자바 객체로 구성됩니다. 그렇기 때문에 Service는 어떤 컨트롤러가 호출하든 상관없이 필요한 매개 변수만 준다면 자신의 비즈니스 로직을 처리하게 됩니다. 즉, 모듈화를 통해 어디서든 재사용이 가능한 클래스 파일이라는 뜻입니다.
(Service에서 request나 response와 같은 객체를 매개변수로 받아서는 안됩니다. request, response를 사용해야하는 작업은 컨트롤러 단에서 해야 합니다.)
이렇게 제대로 구현된 Service라면 단순 Web 기반이 아니라 추후 native app으로 view단이 변경되더라도 Service는 view에 종속적인 코드가 없기 때문에 그대로 재사용할 수 있게 됩니다. 그리고 추가적인 요청 사항이 들어오면 기존의 소스를 수정하는 게 아니라 기존 Service 인터페이스를 구현하는 다른 클래스를 통해 그 객체를 사용하게 하는 것입니다.
(위에서 이야기한 OCP에 따른 변화에는 닫혀있고, 확장에는 열려있는 구조)
'환경 > Spring' 카테고리의 다른 글
spring5 + mybatis + 외장Tomcat8.5 구축 (feat. eclipse, sts3) (0) | 2022.04.19 |
---|---|
Spring5 프로젝트 구축(Eclipse, STS, Maven, MyBatis) (0) | 2022.03.04 |
기존 프로젝트에서 DB에 새로운 테이블 생성 후 이클립스 iBatis설정 (0) | 2022.02.28 |
SqlMapClientTemplate (0) | 2022.02.28 |
이클립스, Maven, Spring5, Tomcat8.5, MySQL, MyBatis를 이용한 프로젝트 환경 구축 (0) | 2022.02.24 |