서비스 계층은 API계층에서 구현한 Controller
클래스가 서비스 계층의 Service
클래스와 메서드 호출을 통해 API계층과 상호작용한다.
Service
클래스는 비즈니스 로직을 처리하는 구간이다.
API계층의 Controller
클래스의 핸들러 메서드와 Service
클래스의 메서드는 1대1로 매칭된다.
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Member { //도메인 엔티티 클래스
private long memberId;
private String email;
private String name;
private String phone;
}
💡lombok 라이브러리에서 제공되는 애너테이션
@Getter/@Setter
@AllArgsConstructor
: 모든 멤버변수를 가진 생성자를 자동 생성
@NoArgsConstructor
: 노! 아규먼트 생성자 자동 생성
: DI를 통해 서비스 계층과 API계층을 연동한다.
💡 생성자 기반 의존성 주입을 할 경우, 주입되는 클래스 객체는 가급적
final
키워드를 사용할 것.
@Service
애너테이션을 추가하면 된다.@Mapper
애너테이션을 통해 MapStruct 라이브러리가 자동으로 Mapper 인터페이스의 구현체를 생성해준다.@Mapper(componentModel = "Spring")
public interface MemberMapper {
Member memberPostDtoToMember(MemberPostDto memberPostDto);
Member memberPatchDtoToMember(MemberPatchDto memberPatchDto);
MemberResponseDto memberToMemberResponseDto(Member member);
}
💡@Mapper(componentModel = "Spring")
componentModel = "Spring" 의 의미 : Spring의 Bean이라는 뜻
☝️ Controller 클래스에 Mapper 인터페이스 import하는 것 잊지 말기
@Build -> @AllArgsConstructor -> @NoArgsconstructor -> @Setter
: DTO클래스와 Entity 클래스가 Mapper를 통해 변환하는 이유
DTO 클래스와 Entity 클래스는 서로 다른 목적을 가지고, 서로 다른 계층에서 사용된다.
하나의 클래스나 메서드 내에서 여러 개의 기능들을 구현하고 있는 것은 객체 지향 코드 관점에서 권장되지 않는다.