springMVC 패턴에서 view에서 넘긴 매개변수를 controller로 넘기고, controller는 service 를 호출한다.
service는 Http 통신 (request나 response 같은 객체) 를 받지 않고 순수한 자바로 이루어진 비즈니스 로직을 구성한다.
service는 매개변수만 있다면 어느 컨트롤러에서 호출하든 사용 가능한 클래스이고
객체 지향 중 OCP 원칙을 따르는 추상화를 이용한 구현 방식이 service와 serviceImpl..이라는데
1:1로 사용할 때는 추상화 없이 작성하는게 더 간단하지 않나? 싶어져서 왜 이런 설계 방식이 나오게 된 건지 궁금했다.
OCP
소프트웨어 요소는 새로운 기능을 추가하거나 변경할 수 있어야 한다.
기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 한다.
소프트웨어 요소는 한 번 구현된 기능이 정상적으로 작동하는 한 그 구현 코드는 수정되어서는 안 된다.
새로운 기능을 추가할 때 기존 코드를 변경하지 않고 확장할 수 있어야 한다.
OCP 구현 방법
추상화와 인터페이스 사용 | 추상화를 통해 구체적인 구현을 인터페이스를 구현하는 클래스에 뺀다. 그리고 새로운 기능을 추가할땐 그 클래스에 추가한다. |
패턴 활용 | 디자인패턴(controller, service, dao...)를 사용하여 기능을 분담한다 |
의존성 주입 | 의존성 주입을 통해 객체가 직접적으로 다른 객체를 생성하거나 의존하는 것을 방지한다 |
https://okky.kr/questions/351520
OKKY - serviceImpl 사용 이유 질문 드립니다.
안녕하세요.초보 개발자 입니다.스프링 프레임워크 사용하면서 이론적으로 공부도하고 실무에 적용도 해봤지만큰 프로젝트를 하지 않아서 그런지 service, serviceImpl를 나누는 이유를 모르겠네요.
okky.kr
개발자들 중에서도 추상화를 통한 설계방식을 써야되나 의견이 분분한 것 같아서
프로젝트 규모에 따라서 설계하는 사람 마음대로인 것 같다.
1:1인 지금은 괜찮을지 몰라도 해당 클래스의 기능 추가 등으로 메서드를 추가 해야할 경우
해당 메서드를 사용하는 쪽에서 기능이 꼬일 경우를 방지하기 위해
유지보수 측면에서 serviceImpl로 분리하는 것으로 보인다.
'CS > SPRING' 카테고리의 다른 글
JPQL과 SQL의 차이점 (0) | 2024.08.12 |
---|---|
JPA의 영속성 컨텍스트 (0) | 2024.08.12 |
JPA를 사용한 간단한 CRUD 구현 (0) | 2024.08.12 |
웹서버 WAS, SERVLET (0) | 2024.07.08 |
JPA (0) | 2024.06.28 |