오늘은 오전에 회의를 하고 오후부터 코딩을 시작했습니다.
Controller, Service, Repository, Entity, Dto에 해당하는 Directory
를 만들고 CRUD를 순서대로 만들었어요. 하지만 시작부터 난관에 부딪혔답니다...
처음부터 모든 Entity를 만들지 않고 시작하여 Import를 할 수 없고 Service에서 가져와야 할 Repository도 사용할 수 없었어요!
그래서 어쩔 수 없이 빨간 상태로 두고 다들 기본 파일을 만든 후 Merge하여 만들기 시작했어요.
프로젝트를 시작할 때에는 기본 Entity와 Repository를 만들고 시작하자!
참조를 위해 StoreRepository에서 findbyId를 통해 Store 값을 가져왔어요. 근데 그냥 가져오면 Optional<Store>
로 가져와져요. 하지만 보통은 마지막에 .orElseThrow를 사용하여 예외를 던지고 그대로 Store
로 가져와요.
Optional<Store> storeById = storeRepository.findById(storeId);
Store store = storeRepository.findById(storeId)
.orElseThrow(() -> new NoSuchElementException("Store with id " + storeId + " not found"));
그래서 Service 아래에 private으로 getStore()
를 만들었답니다. 훨씬 보기 편해요!
Store store = getStore(storeId);
/**
* Store 객체 가져오며 예외처리
*/
private Store getStore(Long storeId) {
return storeRepository.findById(storeId)
.orElseThrow(() -> new NoSuchElementException("Store with id " + storeId + " not found"));
}
처음 보는 친구가 등장했어요! 바로 builder
인데요, 생성자를 통해 만들던 객체를 static
매서드를 통해 만들고, stream
처럼 사용해요.
public static Menu newMenu(Store store, MenuRequestDto dto) {
return Menu.builder()
.store(store)
.name(dto.getName())
.description(dto.getDescription())
.price(dto.getPrice())
.img_path(dto.getImg_path())
.build();
}
Builder
는 소프트웨어 개발에서 객체 생성 패턴 중 하나로, 복잡한 객체를 단계적으로 생성할 수 있도록 도와주는 디자인 패턴입니다. 특히 객체의 속성이 많거나, 생성 과정이 복잡한 경우에 유용합니다.