티스토리 뷰
728x90
반응형
Spring MVC에서 Service 레이어를 interface와 implements로 나누는 이유와 장점을 설명해드리겠습니다.
1. 느슨한 결합도 (Loose Coupling)
- interface를 사용하면 실제 구현체(implements)와 이를 사용하는 클래스 간의 결합도가 낮아집니다.
- 예를 들어, Controller는 ServiceImpl의 구체적인 내용을 알 필요 없이 interface만 알면 됩니다.
2. 유연성과 확장성
public interface UserService {
User findUser(Long id);
}
public class UserServiceImpl implements UserService {
public User findUser(Long id) {
// 실제 구현
}
}
// 새로운 구현체가 필요할 때 쉽게 추가 가능
public class NewUserServiceImpl implements UserService {
public User findUser(Long id) {
// 다른 방식으로 구현
}
}
3. 테스트 용이성
// 테스트를 위한 Mock 구현이 쉬워집니다
public class MockUserService implements UserService {
public User findUser(Long id) {
return new User(id, "test");
}
}
4. 비즈니스 로직의 명확한 정의
- interface는 "무엇을 해야 하는가"를 명확히 정의합니다
- implements는 "어떻게 구현할 것인가"를 담당합니다
5. 다형성 활용
@Autowired
private UserService userService; // interface를 통한 의존성 주입
// 실제 구현체는 설정에 따라 UserServiceImpl 또는 NewUserServiceImpl이 될 수 있습니다
이렇게 분리함으로써 코드의 유지보수가 쉬워지고, 새로운 기능을 추가하거나 변경할 때 기존 코드를 수정하지 않고도 새로운 구현체를 만들어 적용할 수 있습니다. 실제 업무에서는 하나의 interface에 대해 운영용, 테스트용, 개발용 등 다양한 구현체를 만들어 상황에 맞게 사용할 수 있다는 장점이 있습니다.
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- jstl(java standard tag library)
- 제품 등록
- 인텔리제이(intellij)
- await
- 스프링 프레임워크(spring framework)
- 메이븐(maven)
- error-java
- 진수 변환
- jstl(java standard tag library)-core
- REST API
- docker
- 문자 자르기
- 스프링 시큐리티(spring security)-http basic 인증
- System.Diagnostics
- java 키워드 정리
- java.sql
- java-개발 환경 설정하기
- In App Purchase
- 스프링 프레임워크(spring framewordk)
- 특정 문자를 기준으로 자르기
- 표현 언어(expression language)
- .submit()
- MainActor
- React
- nl2br
- 람다식(lambda expression)
- 스프링 시큐리티(spring security)
- system.io
- java web-mvc
- jsp 오픈 소스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함