[Java] IllegalStateException , IllegalArgumentException 차이

Ceing·2024년 8월 23일

Java

목록 보기
5/8
post-thumbnail

개요

  • IllegalArgumentException에 대한 예외 발생 시기는 알겠는데, IllegalStateException에 대한 시기는 애매모호해서 정리해보고자 한다.


※ Argument랑 Parameter 차이가 뭐야?

Argument(전달 인자)

public static void main(String[] args){
	sum(1,2);
}
  • 주입되는 실제 값 , 즉 전달되는 인자를 뜻함

  • 위의 예제에서의 1과 2를 Argument라고 함



Parameter(매개변수)

public static void sum(int a , int b){
	System.out.println(a+b);
}
  • 변수명을 뜻함

  • 즉 위의 코드 예제에서의 a변수명과 b변수명을 뜻함



IllegalArgumentException

  • 부적절한 인수(Argument) 값을 메서드에 파라메터(Parameter)로 건네준 것을 나타내기 위해 발생

  • 즉 인수를 넘긴 후 넘긴 인수에 대한 검증 중 발생하는 오류에 대한 처리를 해줌

  • null이 파라메터로 넘어온 경우는 NullPointerException으로 처리

  • 예를 들어 회원가입 시 이미 존재하는 회원일 경우 회원가입dto에 Argument(인수 값)에 대한 검증 오류이니 IllegalArgumentException을 반환해야되고, 파라메터에 양수를 넘겨야하는데 음수를 넘길 경우 부적절한 인수가 전달된 것이므로 이 또한 IllegalArgumentException을 발생시켜야함

//아이디 존재 여부
public void checkLoginEmailExists(String loginEmail) {
    findByLoginEmail(loginEmail).ifPresent(user -> {
      throw new IllegalArgumentException("이미 존재하는 아이디입니다.");
    });
  }
  • 위의 예제 처럼 파라메터로 넘어온 loginEmail 값이 부적절할 경우 IllegalArgumentException 발생


IllegalStateException

  • 객체가 메서드를 수행하기에 적절하지 않은 상태
  • 즉 파라메터에 값 전달까진 문제 없었지만, 내부적인 상태에 의해서 예외가 발생한 경우
public void removeStock(int stockQuantity){
	int result = this.stockQuantity - stockQuantity;
    if(result < 0){
    	throw new IllegalStateException("0 이하로 재고는 내려갈 수 없습니다.");
    }
}
  • 위와 같이 파라메터에 대한 전달 값에 문제는 없었지만, 서버 내부가 해당 메서드를 수행하기에 적절하지 않은 상태이므로 IllegalStateException 발생!


참고 : 표준 예외를 사용하자

  • 예외도 재사용하는 것이 좋음

  • 예외 클래스의 수가 적을수록 메모리 사용량도 줄고 클래스 적재 시간도 적게 걸리며 다른 사람에게도 읽기 쉽고 익숙하다는 장점이 있음

profile
이유에 대해 끊임없이 생각하고 고민하는 개발자

0개의 댓글