📌 [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은 잘못된 인자가 메서드에 전달될 때 발생하는 예외입니다.
유효성 검사를 철저히 수행하면 이 오류를 방지할 수 있으며, 코드를 더욱 안정적으로 만들 수 있습니다! 🚀
📌 더 많은 정보가 궁금하다면?
'Java 오류 & 개발 > Java 기본 문법 & 오류' 카테고리의 다른 글
[Java] Checked Exception vs Unchecked Exception 차이점 (1) | 2025.03.13 |
---|---|
[Java] String vs StringBuilder vs StringBuffer 차이 (0) | 2025.03.12 |
[Java] Checked Exception vs Unchecked Exception 차이 (0) | 2025.03.12 |
[Java] HashMap vs Hashtable 차이점 및 활용법 (1) | 2025.03.12 |
[Java] NullPointerException 발생 원인과 해결 방법 (0) | 2025.03.10 |