인프런 - 스프링 부트와 JPA 활용1 by 김영한 을 기반으로 작성된 글입니다.
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
package jpabook.jpashop.domain.item;
import jpabook.jpashop.domain.Category;
import jpabook.jpashop.domain.exception.NotEnoughStockException;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
/*상속관계 매핑, 전략 지정 = 싱글테이블*/
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="dtype")
@Getter @Setter
public abstract class Item {
@Id @GeneratedValue
@Column(name="item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
//==비즈니스 로직==//
/** stock 증가 */
public void addStock(int quantity){
this.stockQuantity += quantity;
}
/** stock 감소 */
public void removeStock(int quantity){
int restStock = this.stockQuantity - quantity;
if (restStock < 0){
throw new NotEnoughStockException("need more stock");
}
this.stockQuantity = restStock;
}
}
1) 기능 설명
비즈니스 로직 분석
💡 데이터를 가지고 있는 쪽에 비즈니스 메서드가 있는 것이 좋다 👉 응집력 높음
💡 변수 값을 변경해야 할 때
@Setter
대신 핵심 비즈니스 메서드로 변경해야 하는 것이 더 객체지향적이다
package jpabook.jpashop.domain.exception;
public class NotEnoughStockException extends RuntimeException{
public NotEnoughStockException() {
super();
}
public NotEnoughStockException(String message) {
super(message);
}
public NotEnoughStockException(String message, Throwable cause) {
super(message, cause);
}
public NotEnoughStockException(Throwable cause) {
super(cause);
}
}