본문 바로가기
공부방/Java

Java IllegalArgumentException

by SmartCow 2025. 7. 31.

IllegalArgumentException은 Java에서 매우 자주 발생하는 런타임 예외로, 메서드에 잘못된 인자가 전달되었을 때 발생한다. 여기서는 개념, 발생 원인, 예제 코드, 해결 방법까지 다뤄보겠다.

1. IllegalArgumentException 이란?

IllegalArgumentException메서드에 전달된 인자가 잘못되었을 때 발생하는 RuntimeException다. 체크 예외(Checked Exception)가 아니므로 throws 선언이 필요하지 않다.

java.lang.Object
   ↳ java.lang.Throwable
      ↳ java.lang.Exception
         ↳ java.lang.RuntimeException
            ↳ java.lang.IllegalArgumentException

2. 언제 발생하는가?

  • 메서드 인자의 값이 허용 범위를 벗어날 때
  • null 값이 허용되지 않는 파라미터에 전달될 때
  • 배열의 크기, 인덱스 등 논리적으로 불가능한 값이 들어왔을 때
public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("나이는 음수가 될 수 없습니다.");
    }
    this.age = age;
}

3. 예제 코드

(1) 잘못된 인자 전달

public static int divide(int a, int b) {
    if (b == 0) {
        throw new IllegalArgumentException("0으로 나눌 수 없습니다.");
    }
    return a / b;
}

public static void main(String[] args) {
    int result = divide(10, 0); // IllegalArgumentException 발생
}

(2) null 검증

public void setName(String name) {
    if (name == null || name.isBlank()) {
        throw new IllegalArgumentException("이름은 비어있을 수 없습니다.");
    }
    this.name = name;
}

4. 왜 사용하는가?

  • 메서드 계약(Contract)을 보장하고, 유효하지 않은 값 차단
  • 예외 메시지를 통해 디버깅 용이
  • 방어적 프로그래밍(Defensive Programming) 구현 가능

5. 해결 방법

(1) 호출 전 유효성 검사

int age = -1;
if (age < 0) {
    System.out.println("나이는 음수일 수 없습니다.");
} else {
    user.setAge(age);
}

(2) try-catch로 예외 처리

try {
    user.setAge(-5);
} catch (IllegalArgumentException e) {
    System.err.println("잘못된 인자: " + e.getMessage());
}

(3) Objects.requireNonNull() 사용

import java.util.Objects;

public void setName(String name) {
    this.name = Objects.requireNonNull(name, "이름은 null일 수 없습니다.");
}

IllegalArgumentException을 적절히 활용하면 코드의 안정성을 높이고 유지보수를 쉽게 할 수 있다. 특히 메서드 설계 시 인자 검증을 습관화하는 것이 중요하다.

'공부방 > Java' 카테고리의 다른 글

Java System.out과 Logger 차이점  (5) 2025.07.30
<form:hidden> 사용방법  (0) 2025.05.08
XML 쿼리에서 비교연산자 에러 해결( <![CDATA[ > ]]> )  (0) 2024.05.22
Autowired 어노테이션  (0) 2022.11.15
web.xml 생성  (0) 2022.11.05