try catch
나 throws
같은 명시적인 처리를 해주어야 한다.unchecked exception 이다. 따라서 명시적인 처리를 해주지 않아도 된다.
메서드에서 예외 발생 → 예외 처리 안함 → 예외가 발생한 메서드를 호출한 메서드로 예외가 넘어감
ex) DataAccessException은 런타임 예외의 일종
항상 custom exception은 RuntimeException 만을 상속하여 만들었다. 하지만 그럴 필요 없다. 상황에 맞는 exception을 사용하자!(ex. IllegalArgumentException 등)
항상 RuntimeException을 상속한 CustomException이 있으면 throws를 추가하였다. 그럴 필요 없다.
클래스는 단수형 명사로 이름을 짖자
Enum의 valueOf를 잘 사용하자. 모든 경우에서 추가 속성을 사용할 필요는 없다.
public Console(VoucherService voucherService, CustomerService customerService) {
this.voucherService = voucherService;
this.customerService = customerService;
}
필요 없는 결합이었다. Console 클래스는 입출력을 목적으로 하는 클래스였기에 Voucher나 Customer의 역할을 가지고 있을 필요가 없었다. 따라서 입력에 따라 필요한 메서드를 수행시키는 Administrator라는 클래스를 생성하고 해당 클래스에 입출력 관련, Voucher 관련, Customer 관련 클래스들을 결합하였습니다.
현재 답을 완전히 못내린 문제이다. 일단 여기에 정리한 후 해결이 되면 수정하겠다.
어노테이션을 이용해 편리하게 트랜잭션을 관리하기 위해서 사용한다.(알아서 commit과 rollback을 처리)
성능을 높일 수 있다고 해서(JPA의 경우 더티 채킹 안함 등)
→ 근데 이 기능은 JPA를 사용할 경우에만 의미가 있는 것일까?
→ 하지만 DML이 동시에 여러개 있는 경우(insert문이 2개)가 아니라면 @Transactional 어노테이션을 사용할 필요가 없지 않을까?