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 |