1. ❓ IllegalArgumentException이란 무엇인가요?
IllegalArgumentException은 메서드에 전달된 인자(Argument)가 적절하지 않을 때 발생하는 언체크드 예외(Unchecked Exception)입니다.
주로 메서드 내부에서 입력값의 범위를 체크하거나, 특정 조건을 만족해야 하는 파라미터를 검증할 때 사용자가 직접 던지도록 설계하는 경우가 많습니다. 프로그램의 논리적 오류를 실행 시점에 즉시 파악할 수 있게 도와줍니다.
2. 🔍 왜 발생하며, 언제 사용하나요?
주로 **데이터의 유효성(Validation)**을 검사하는 로직에서 발생합니다.
- 범위 초과: "나이는 0보다 커야 함"이라는 규칙이 있는데 -5가 들어온 경우
- 길이 제한: "비밀번호는 8자 이상"이어야 하는데 3자만 들어온 경우
- 잘못된 형식: 특정 포맷(예: 이메일, 전화번호)이 아닌 문자열이 들어온 경우
public void setAge(int age) {
if (age < 0) {
// 인자가 유효하지 않으므로 직접 예외를 던짐
throw new IllegalArgumentException("나이는 0보다 작을 수 없습니다: " + age);
}
this.age = age;
}
3. 🛡️ 예외를 방지하고 잘 활용하는 법
1️⃣ 방어적 프로그래밍 (Defensive Programming)
메서드의 첫머리에서 인자값을 먼저 검증하세요. 이를 **'가드 절(Guard Clause)'**이라고 부릅니다. 로직 중간에서 에러가 나는 것보다 입구에서 차단하는 것이 훨씬 안전합니다.
2️⃣ 명확한 메시지 전달
예외를 던질 때 어떤 값이 잘못되었는지 메시지에 포함하세요. 디버깅 시간을 획기적으로 줄여줍니다. throw new IllegalArgumentException("금액은 100원 단위여야 합니다. 입력값: " + price);
3️⃣ 라이브러리 활용 (Preconditions)
Guava 라이브러리나 Spring의 Assert 클래스를 사용하면 코드를 더 간결하게 짤 수 있습니다.
// Spring의 Assert 사용 예시
Assert.isTrue(age > 0, "나이는 0보다 커야 합니다.");
💡 시니어의 조언: '빠른 실패(Fail-Fast)' 전략
IllegalArgumentException은 빠른 실패(Fail-Fast) 전략의 핵심 도구입니다. 잘못된 값이 시스템 깊숙이 침투하여 나중에 엉뚱한 곳에서 문제를 일으키게 두지 마세요. 메서드 호출 즉시 예외를 터뜨려 흐름을 끊는 것이 시스템의 전체적인 안정성을 높이는 길입니다.
비슷한 예외로 NullPointerException이 있지만, 인자값이 null인 경우에는 IllegalArgumentException보다는 표준에 따라 NullPointerException을 던지거나 Objects.requireNonNull()을 사용하는 것이 자바의 관례에 더 가깝습니다.
'개발 > Trouble Shooting' 카테고리의 다른 글
| ORA-12154: TNS:could not resolve the connect identifier specified (0) | 2025.12.29 |
|---|---|
| ORA-01017: invalid username/password; logon denied (0) | 2025.12.29 |
| 맞지 않는 옷을 입히지 마세요: ClassCastException 완벽 가이드 (0) | 2025.12.29 |
| 0으로 나눌 수 없습니다! ArithmeticException 완벽 가이드 (0) | 2025.12.29 |
| 정해진 선을 넘지 마세요: ArrayIndexOutOfBoundsException 완벽 가이드 (0) | 2025.12.29 |