private Long id;
private String itemName;
private Integer price;
private Integer quantity;
저번 강의에서 진행했던 요구사항 분석에 맞춰 상품 도메인을 개발하고 테스트 코드를 작성해 확인하는 코드를 진행한다.
우선 Item 클래스를 만들어 주었다. 여기서 int가 아닌 Integer를 사용한 이유는 null을 사용해야 하는데 int는 null을 허용하지 않아 Integer를 사용했다. 또한, 어노테이션을 @Data로 주로 사용했었는데 이 어노테이션 안에는 다른 기능들이 들어있어서 @Getter, @Setter를 사용하는 것이 좋다고 한다.
또, 여기서 생성자를 따로 만들어 id에 관한 생성자는 포함시키지 않은 생성자도 만들어 줬는데 작은 프로젝트고 내가 어떤 것을 가지고 있는지 인지하고 있는 상태이기 때문에 이렇게 하는 것이지 가능하면 따로 만들어 주는 것이 좋다고 한다.
중복과 명확성을 따질 때 중복이 되더라도 명확하게 하는 것을 추천한다고 강사님이 말 했다.
**// 실무에서는 HashMap과 Long을 사용하면 안 된다.
private static final Map<Long, Item> store = new HashMap<>(); // static
private static Long sequence = 0L; //static**
실무에서 할 때는 HashMap을 사용하면 안 된다. 멀티쓰레드 환경에서 HashMap을 사용하면 안 되고 ConcurrentHashMap을 사용해야 한다. Long도 쓰면 안 되고 atomicLong 등 다른 것을 사용해야 한다.
public void update(Long itemId, Item updateParam) {
Item findItem = findById(itemId);
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
}
update 기능을 만들어 주고 테스트 코드를 작성해서 확인을 해봤다.
@Test
void updateItem() {
//given
Item item1 = new Item("item1", 10000, 10);
Item savedItem = itemRepository.save(item1);
Long itemId = savedItem.getId();
//when
Item updateParam = new Item("item2", 20000, 30);
itemRepository.update(itemId, updateParam);
//then
Item findItem = itemRepository.findById(itemId);
assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity());
}
item1을 생성자를 통해 생성하고 저장소에 담아준다.
update 기능을 사용하여 내용을 변경해주고 마지막으로 안에 들어있는 값이 변경한 값과 같은지 확인을 해본다. 테스트는 정상 통과했다.
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 상품 상세 페이지 타임리프 적용 및 목록으로 가기 구현 (0) | 2022.02.03 |
---|---|
[Spring Boot] : thymelef, 타임리프 간단 사용법 (0) | 2022.02.02 |
[Spring Boot] : 프로젝트 생성 및 요구사항 분석 (0) | 2022.02.01 |
[Spring Boot] : 요청 매핑 핸들러 어뎁터 구조 (0) | 2022.01.28 |
[Spring Boot] : HTTP 메시지 컨버터 (0) | 2022.01.28 |
댓글