이번 포스트에서는 Spring Boot에서 Service의 사용법에 대해 알아보겠습니다..
Github에서 샘플 프로젝트의 전체 코드를 확인할 수 있습니다.
GitHub - xvzc/spring-test: spring test repo
객체 지향적 개발
도메인과 관련된 로직은 최대한 도메인 영역에 숨기는 것이 좋습니다.
1
2
3
4
5
6
7
8
9
| @Transactional
public UserDto.Response updateUser(final UserDto.UpdateRequest dto, final Long id) {
User user = userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException(ErrorCode.USER_NOT_FOUND));
user.update(dto); // 엔티티에 직접 정의한 메서드
return UserDto.Response.of(user);
}
|
Interface 의존성 주입 방식의 개선 방안
기존 Interface 의존성 주입 방식의 경우 메서드를 변경할 때 인터페이스와 구현체를 둘다 바꿔야 한다는 번거로움이 있습니다. 단일 서비스 인터페이스에 하나의 구현체만 존재한다면, 인터페이스 의존성 주입방식을 사용하지 않습니다. 다형성을 활용해야하는 상황이 생긴다면 해당 기능만 인터페이스로 분리하는 것도 좋은 아이디어가 될 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
| @Service
@AllArgsConstructor
public class UserService {
...
public UserDto.Response getUser(final Long id) {
User user = userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException(ErrorCode.USER_NOT_FOUND));
return UserDto.Response.of(user);
}
...
}
|