쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Git
  • JPA
  • springboot
  • 스프링부트
  • java
  • 알고리즘
  • 재귀
  • Spring
  • MVC
  • 백준
  • 함수형인터페이스
  • SQL
  • 스프링
  • 깃허브
  • querydsl
  • 자바
  • http
  • GitHub
  • REST API
  • 자료구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[Spring] MVC 웹 페이지 만들기
[ Spring ]/SpringMVC 1편

[Spring] MVC 웹 페이지 만들기

2022. 3. 19. 02:07
728x90

 

 

 

 

 

 

 

도메인 개발

📌 Item 도메인 객체 (Item.java)

package hello.itemservice.item;

import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class Item {

    private Long id;

    private String itemName;
    private Integer price;
    private Integer quantity;

    public Item() {

    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }
}
  • @Data는 위험하다. 핵심 도메인 객체(DB에서 꺼내온 객체)에는 @Data를 쓰기엔 위험하다. 그러나 DTO 객체(가공된 객체)는 써도 된다.
    • @ToString의 경우 객체의 양방향 연관관계(a -> b, b ->a)가 있을 때 무한 루프로 호출될 수 있다.
    • Equals와 hashCode도 모든 필드를 다 기준으로 잡기 때문의 주의해야 합니다.
  • 도메인 객체는 @Getter, @Setter을 기본으로 쓰고 필요하면 더 추가해서 쓸 것.

 

📌 ItemDTO 객체

package hello.itemservice.domain.dto;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Getter
public class ItemParamDTO {
    private final String itemName;
    private final Integer price;
    private final Integer quantity;

}

 

📌 Item 저장소

package hello.itemservice.domain.repository;

import hello.itemservice.domain.dto.ItemParamDTO;
import hello.itemservice.domain.item.Item;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Repository
public class ItemRepository {

    private static final Map<Long, Item> store = new ConcurrentHashMap<>();
    private static long sequence = 0L;

    public Item save(Item item) {
        item.setId(++sequence);
        store.put(item.getId(), item);
        return item;
    }

    public Item findById(Long itemId) {
        return store.get(itemId);
    }

    public List<Item> findAll() {
        return new ArrayList<>(store.values());
    }

    public void update(Long itemId, ItemParamDTO itemParamDTO) {
        Item findItem = findById(itemId);

        findItem.setItemName(itemParamDTO.getItemName());
        findItem.setPrice(itemParamDTO.getPrice());
        findItem.setQuantity(itemParamDTO.getQuantity());
    }

    public void clearStore() {
        store.clear();
    }
}

 

📌 도메인 테스트 코드

package hello.itemservice.domain.repository;

import hello.itemservice.domain.dto.ItemParamDTO;
import hello.itemservice.domain.item.Item;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;


class ItemRepositoryTest {

    ItemRepository itemRepository = new ItemRepository();

    @AfterEach
    void afterEach() {
        itemRepository.clearStore();
    }

    @Test
    void save() {
        // given
        Item item = new Item("itemA", 10000, 10);

        // when
        Item savedItem = itemRepository.save(item);

        // then
        Item findItem = itemRepository.findById(item.getId());
        assertThat(findItem).isEqualTo(savedItem);

    }

    @Test
    void findAll() {
        // given
        Item item1 = new Item("item1", 10000, 10);
        Item item2 = new Item("item2", 20000, 20);

        itemRepository.save(item1);
        itemRepository.save(item2);

        // when
        List<Item> result = itemRepository.findAll();

        // then
        assertThat(result.size()).isEqualTo(2);
        assertThat(result).contains(item1, item2);
    }

    @Test
    void updateItem() {

        // given
        Item item = new Item("item1", 10000, 10);

        Item savedItem = itemRepository.save(item);
        Long itemId = savedItem.getId();

        // when
        ItemParamDTO itemParamDTO = new ItemParamDTO("item2", 2000, 30);
        itemRepository.update(itemId, itemParamDTO);

        // then
        Item findItem = itemRepository.findById(itemId);

        assertThat(findItem.getItemName()).isEqualTo(itemParamDTO.getItemName());
        assertThat(findItem.getPrice()).isEqualTo(itemParamDTO.getPrice());
        assertThat(findItem.getQuantity()).isEqualTo(itemParamDTO.getQuantity());

    }

}

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'[ Spring ] > SpringMVC 1편' 카테고리의 다른 글

[Spring] HTTP 메시지 컨버터 (Message Converter)  (0) 2022.02.26
[Spring] HTTP 응답을 보내는 방법 (정적 리소스 / 뷰 템플릿 / HTTP 메시지 )  (0) 2022.02.26
[Spring] HTTP 요청을 받는 방법 (요청 파라미터 / HTTP 요청 메시지)  (0) 2022.02.25
[Spring] HTTP request 헤더 조회  (0) 2022.02.25
[Spring] 기본 매핑 / 요청 매핑  (0) 2022.02.25
    '[ Spring ]/SpringMVC 1편' 카테고리의 다른 글
    • [Spring] HTTP 메시지 컨버터 (Message Converter)
    • [Spring] HTTP 응답을 보내는 방법 (정적 리소스 / 뷰 템플릿 / HTTP 메시지 )
    • [Spring] HTTP 요청을 받는 방법 (요청 파라미터 / HTTP 요청 메시지)
    • [Spring] HTTP request 헤더 조회
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바