본문 바로가기

JAVA/EXCEPTION

IllegalArgumentException 발생원인과 해결방법

`IllegalArgumentException`은 메서드에 잘못된 인수가 전달될 때 자바에서 발생하는 예외입니다. 즉, 메서드에 전달된 인수가 해당 메서드가 수행될 수 없는 값이거나 유효하지 않은 값일 때 발생합니다.

**발생 원인:**
`IllegalArgumentException`은 일반적으로 다음과 같은 상황에서 발생합니다:

1. **메서드에 전달된 인수가 예상 범위를 벗어날 때**: 메서드는 특정한 범위의 값을 기대하고, 이 범위를 벗어난 인수가 전달될 때 예외가 발생합니다.

   ```java
   public void doSomething(int value) {
       if (value < 0 || value > 100) {
           throw new IllegalArgumentException("value는 0부터 100 사이의 값이어야 합니다.");
       }
       // 메서드 로직 처리
   }

   doSomething(120); // 이 부분에서 IllegalArgumentException이 발생합니다.
   ```

2. **메서드에 예상하지 못한 형식의 인수가 전달될 때**: 메서드가 특정한 데이터 형식의 인수를 필요로 하지만, 다른 형식의 인수가 전달되면 예외가 발생합니다.

   ```java
   public void doSomething(String name) {
       if (name == null || name.isEmpty()) {
           throw new IllegalArgumentException("name은 비어있을 수 없습니다.");
       }
       // 메서드 로직 처리
   }

   doSomething(42); // 이 부분에서 IllegalArgumentException이 발생합니다.
   ```

**해결 방법:**
`IllegalArgumentException`을 피하기 위해서는 메서드에 유효한 인수가 전달되도록 해야 합니다. 이를 위해 다음과 같은 해결 방법을 사용할 수 있습니다:

1. **전달된 인수의 유효성 검사**: 메서드에서 인수를 사용하기 전에 인수가 예상한 범위 내에 있는지 확인합니다. 필요한 유효성 검사를 수행하여 예외를 미리 방지할 수 있습니다.

   ```java
   public void doSomething(int value) {
       if (value < 0 || value > 100) {
           throw new IllegalArgumentException("value는 0부터 100 사이의 값이어야 합니다.");
       }
       // 메서드 로직 처리
   }
   ```

2. **올바른 데이터 형식 사용**: 메서드에서 요구하는 데이터 형식과 일치하는 인수를 전달합니다.

   ```java
   public void doSomething(String name) {
       if (name == null || name.isEmpty()) {
           throw new IllegalArgumentException("name은 비어있을 수 없습니다.");
       }
       // 메서드 로직 처리
   }
   ```

올바른 인수가 메서드로 전달되도록 유효성을 검사하고 필요한 예외를 미리 방지함으로써 `IllegalArgumentException`을 효과적으로 처리할 수 있습니다. 이를 통해 메서드의 안정성과 예외 처리를 향상시킬 수 있습니다.