본문 바로가기
카테고리 없음

이팩티브 자바 아이템2 IllegalArgumentException

by applepick 2022. 10. 30.
반응형

IllegalArgumentException는 RuntimeException을 상속받고, 어떤 Argument가 잘못되어있는지 예외를 던지는 클래스입니다.

if (deliveryDate.isBefore(LocalDate.now())) {
    throw new IllegalArgumentException("deliveryDate can't be earlier than " + LocalDate.now());
}

RuntimeException을 상속 O -> Unchecked Exception

RuntimeException을 상속 X -> Checked Exception

 

 

checked exception과 unchecked exception의 차이점?

checked exception은 다시 checked exception 던지거나 다시 try catch로 exception 던져야 합니다.

예외 처리를 클라이언트가 받았을 때 복구가 가능하지 않은 경우는 unchecked exception을 사용합니다.

주의 : 트랜잭션의 롤백과 예외처리는 별개로 생각해야 합니다. 

 

 

간혹 가다 메서드 선언부에 unchecked exception을 선언하는 이유는 무엇일까?

public void updateDeliveryDate(LocalDate deliveryDate) throws IllegalArgumentException, NullPointerException {
	...
}

선언을 안 하여도 사용할 수 있지만, 클라이언트에게 알려주고 싶을 때 사용할 수 있습니다. 이 메서드에서는 이러이러한 Exception을 명시적으로 알려줄 수 있습니다. 

선언하지 않는 경우는 너무 많은 unchecked exception을 선언하게 되면 코드의 가독성을 떨어트릴 수 있기 때문입니다. 

 

checked exception을 왜 사용하는 걸까?

해당 에러가 발생했을 경우 클라이언트가 이 exception의 후속처리를 해주기를 바란다면 checked exception를 사용합니다.

 

반응형

댓글