본문 바로가기

Java 오류 & 개발/Java 기본 문법 & 오류

[Java] IllegalArgumentException 발생 원인과 해결 방법

📌 [Java] IllegalArgumentException 발생 원인과 해결 방법

📌 IllegalArgumentException이란?

IllegalArgumentException은 메서드에 전달된 인자가 유효하지 않을 때 발생하는 런타임 예외입니다.
즉, 메서드가 예상하는 범위나 조건을 벗어난 값을 받았을 때 예외가 발생합니다.


📌 IllegalArgumentException이 발생하는 경우

1️⃣ 메서드에 잘못된 인자가 전달될 때

설명: 메서드 호출 시, 허용되지 않은 값이 전달되면 예외가 발생합니다.

오류 발생 예제:


public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("나이는 0 이상이어야 합니다.");
    }
    this.age = age;
}

public static void main(String[] args) {
    setAge(-5); // IllegalArgumentException 발생
}

해결 방법: 유효성 검사를 철저히 수행하여 허용되지 않는 값이 들어오지 않도록 합니다.


public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("나이는 0 이상이어야 합니다.");
    }
    this.age = age;
}

2️⃣ Enum 타입에서 잘못된 값이 전달될 때

설명: Enum 타입의 값을 valueOf() 메서드로 변환할 때, 존재하지 않는 값이면 예외가 발생합니다.

오류 발생 예제:


enum Day { MONDAY, TUESDAY, WEDNESDAY }

public static void main(String[] args) {
    Day day = Day.valueOf("SUNDAY"); // IllegalArgumentException 발생
}

해결 방법: Enum.valueOf()를 호출하기 전에 값이 유효한지 확인해야 합니다.


enum Day { MONDAY, TUESDAY, WEDNESDAY }

public static boolean isValidDay(String day) {
    for (Day d : Day.values()) {
        if (d.name().equals(day)) {
            return true;
        }
    }
    return false;
}

public static void main(String[] args) {
    String input = "SUNDAY";
    if (isValidDay(input)) {
        Day day = Day.valueOf(input);
        System.out.println(day);
    } else {
        System.out.println("유효하지 않은 값입니다.");
    }
}

3️⃣ 숫자 변환 시 잘못된 입력값이 전달될 때

설명: 문자열을 숫자로 변환할 때, 숫자로 변환할 수 없는 값이 포함되면 예외가 발생합니다.

오류 발생 예제:


public static void main(String[] args) {
    int number = Integer.parseInt("ABC"); // IllegalArgumentException 발생
}

해결 방법: 변환 전에 입력값이 올바른 숫자인지 검증해야 합니다.


public static boolean isNumeric(String str) {
    return str.matches("-?\\d+(\\.\\d+)?");
}

public static void main(String[] args) {
    String input = "ABC";
    if (isNumeric(input)) {
        int number = Integer.parseInt(input);
        System.out.println(number);
    } else {
        System.out.println("숫자로 변환할 수 없는 값입니다.");
    }
}

4️⃣ 컬렉션에서 유효하지 않은 인덱스를 참조할 때

설명: 리스트(List)에서 존재하지 않는 인덱스를 참조하면 예외가 발생할 수 있습니다.

오류 발생 예제:


import java.util.List;

public static void main(String[] args) {
    List list = List.of("A", "B", "C");
    System.out.println(list.get(5)); // IllegalArgumentException 발생
}

해결 방법: 인덱스가 유효한 범위 내에 있는지 확인해야 합니다.


import java.util.List;

public static void main(String[] args) {
    List list = List.of("A", "B", "C");
    int index = 5;
    if (index >= 0 && index < list.size()) {
        System.out.println(list.get(index));
    } else {
        System.out.println("유효하지 않은 인덱스입니다.");
    }
}

📌 IllegalArgumentException 예방법 요약

  • 메서드 호출 전에 인자가 유효한지 검증
  • Enum.valueOf() 사용 전에 값이 존재하는지 확인
  • 문자열을 숫자로 변환할 때 숫자 여부 확인
  • 리스트(List)에서 인덱스 범위 체크

🔍 결론

IllegalArgumentException은 잘못된 인자가 메서드에 전달될 때 발생하는 예외입니다.
유효성 검사를 철저히 수행하면 이 오류를 방지할 수 있으며, 코드를 더욱 안정적으로 만들 수 있습니다! 🚀


📌 더 많은 정보가 궁금하다면?

📌 https://jins-pp.tistory.com/