Java IllegalArgumentException 의미, 발생 이유

Java에서 IllegalArgumentException의 의미에 대해서 알아보고, 어떤 경우에 사용되는지, 에러가 발생되었을 때 어떻게 대처해야 하는지 알아보겠습니다.

IllegalArgumentException 의미, 발생 이유

IllegalArgumentException는 메소드로 전달된 인자가 유효하지 않을 때 발생되는 Exception입니다.

즉, API를 설계할 때, AP를 이용하는 개발자가 실수로 잘못된 인자를 전달하는 것을 사전에 알려주기 위해서 IllegalArgumentException를 발생시킵니다.

예제 1

아래 setValue(int value)는 클래스의 멤버 변수에 인자로 전달된 값을 설정됩니다. API만 보면 음수/양수를 모두 저장할 수 있을 것 같은데, 주석을 보면 0과 양수만 저장할 수 있다고 합니다. API를 사용하는 개발자가 이런 정보를 모른다면 음수를 설정할 수 있고, 객체가 동작하다가 나중에 문제가 발생할 수 있습니다.

이런 이유로, 개발자에게 사전에 알려주기 위해 인자의 조건을 체크하고 잘못된 값이 전달되었을 때 IllegalArgumentException를 발생시키도록 구현할 수 있습니다.

/**
 * Note that it sets only a non-negative value
 */
public void setValue(int value) {
    if (value < 0) {
        throw new IllegalArgumentException("value must be non-negative");
    }
    // 멤버 변수에 value를 저장합니다.
    mValue = value
}

예제 2

온도를 저장하는 클래스에서 섭씨 인지, 화씨인지 설정하는 setTemperatureScale()에서, 섭씨 또는 화씨가 아닌 다른 값이 전달되었을 때 예외를 발생시킬 수 있습니다.

public void setTemperatureScale(String scale) {
    if (!scale.equalsIgnoreCase("Celsius") && !scale.equalsIgnoreCase("Fahrenheit")) {
        throw new IllegalArgumentException("invalid temperature scale: " + scale);
    }

    // do something ....
}

예제 3

년도를 저장하는 setYear(int year) 메소드가 1900~2100 년도만 취급하도록 만들 때 아래와 같이 그 외의 년도 값이 인자로 전달될 때 예외를 발생시키도록 구현할 수 있습니다.

개발자가 생각했을 때 이 프로그램은 최대 50년도 사용안될텐데, 2100 이상 년도에 태어난 사람이나 1900에 태어난 사람에 대한 케이스가 없다고 생각했을 수 있고, 개발자 실수로 잘못된 인자가 전달되는 경우가 있을 수 있다고 생각하여 이렇게 예외를 발생시키도록 만들었을 수 있습니다.

public void setYear(int year) {
    if (year < 1900 || year > 2100) {
        throw new IllegalArgumentException("year must be between 1900 and 2100");
    }
    // year를 사용하여 작업을 수행합니다.
}

대처 방법

어떤 라이브러리 사용 중 IllegalArgumentException가 발생했다면, 잘못된 값을 인자로 전달했을 가능성이 매우 높습니다.

그리고 대부분의 경우, 에러 메시지에 어떤 이유로 변수 값이 잘못되었는지 상세히 설명해 줍니다.

또한, API의 JavaDoc을 보시면 이런 조건에 대해서 자세히 설명이 되어있을 수 있고, 설명이 없다면 코드를 확인해서 유효한 변수 범위가 무엇인지 확인해볼 수 있습니다.

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha