이번 과제에서 피드백 받은 부분이 두가지가 있다.
@Service
public class ScheduleService {
private ScheduleRepository scheduleRepository;
Schedule schedule;
public ScheduleService(ScheduleRepository scheduleRepository) {
this.scheduleRepository = scheduleRepository;
}
public CreateResponseDto createSchedule(CreateRequestDto createRequestDto) {
schedule = new Schedule(createRequestDto);
Schedule saveSchedule = scheduleRepository.save(schedule);
CreateResponseDto createResponseDto = new CreateResponseDto(saveSchedule);
return createResponseDto;
}
...
이렇게 코드를 작성했는데 이유는 Service단에서 일정을 저장하고 읽어오고 수정,삭제 하는 메소드들에서 공통적으로 객체를 새로 생성하였는데 코드면에서만 생각해 공통 부분으로 작성해도 되겠다고 생각했다..
하지만 이런 식으로 객체 생성을 공유하면 동시에 일정을 작성할 때 객체를 공유하므로 이 일정 관리 프로그램에서는 적합하지 않다는 피드백을 받았다.
@Service
public class ScheduleService {
private ScheduleRepository scheduleRepository;
public ScheduleService(ScheduleRepository scheduleRepository) {
this.scheduleRepository = scheduleRepository;
}
public CreateResponseDto createSchedule(CreateRequestDto createRequestDto) {
Schedule schedule = new Schedule(createRequestDto);
Schedule saveSchedule = scheduleRepository.save(schedule);
CreateResponseDto createResponseDto = new CreateResponseDto(saveSchedule);
return createResponseDto;
}
...
메소드마다 새로 객체를 생성해서 받을 수 있도록 바꿔주었다.
코드면에서만 생각하면 안되고 서비스면에서 생각을 잘 해봐야겠다고 반성했다.
@Service
public class ScheduleService {
private ScheduleRepository scheduleRepository;
public ScheduleService(ScheduleRepository scheduleRepository) {
this.scheduleRepository = scheduleRepository;
}
public CreateResponseDto createSchedule(CreateRequestDto createRequestDto) {
Schedule schedule = new Schedule(createRequestDto);
...
이렇게 의존성 주입을 할 때 생성자가 필요한 필드로 직접 생성자를 주입받았다.
이 부분을 @RequiredArgsConstructor의 Lombok을 사용해보라고 권유받았다.
@Service
@RequiredArgsConstructor
public class ScheduleService {
private final ScheduleRepository scheduleRepository;
public CreateResponseDto createSchedule(CreateRequestDto createRequestDto) {
Schedule schedule = new Schedule(createRequestDto);
...
이렇게 코드를 바꾸면 원하는 필드들만 final을 붙여 생성자를 만들어 줄 수 있다.