개발 & 데이터베이스/JAVA

자바 NumberFormatException 발생 원인 및 예외 처리

K.두부 2023. 4. 19. 12:00
반응형

자바(Java)에서 발생하는 NumberFormatException 예외에 대해서 알아보겠다.

 

✅ 예외(Exception) ?  오류(Error) ?

: 프로그램 실행 중에 예상 가능한 상황에서 발생하는 문제로 예외 처리를 통해 프로그램의 안전성을 유지할 수 있다.

  오류는 예상하지 못한 상황에서 발생하는 심각한 문제로 일반적으로 오류가 발생하면 프로그램이 중단된다.

 

 

해당 예외는 "숫자로 변환할 수 없는 문자열이 입력된 경우"에 발생한다.

보통 숫자로 변환할 수 없는 문자열이 입력되면 parseInt(), parseLong() 등과 같은 숫자 변환 메서드에서 NumberFormatException 예외를 발생시킨다.

 

NumberFormatException 예외가 발생하는 원인

1. 숫자로 변환할 수 없는 문자열이 입력된 경우

public class Main {
    public static void main(String[] args) {
        String tmp = "1000A";
        
        System.out.println(Integer.parseInt(tmp));
    }
}

tmp 변수에 "A"가 포함되어 있기 때문에 NumberFormatException이 발생한다. 해당 문자를 제거하고 실행시키면 정상 작동하는 것을 확인할 수 있다.

 

2. 변환하고자하는 자료형의 표현 범위를 넘어설 경우

public class Main {
    public static void main(String[] args) {
        String tmp = "2147483648";
        
        System.out.println(Integer.parseInt(tmp));
    }
}

int형의 범위는 -2,147,483,648 ~ 2,147,483,647다. 해당 범위를 넘어서는 경우 NumberFormatException이 발생한다.

 

정수형 타입 활당되는 메모리 크기 데이터 표현 범위
byte 1바이트 -128 ~ 127
short 2바이트 -32,768 ~ 32,767
int 4바이트 -2,147,483,648 ~ 2,147,483,647
long 8바이트 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

3. null 값을 변환하려고 할 경우

public class Main {
    public static void main(String[] args) {
        String tmp = null;
        
        System.out.println(Integer.parseInt(tmp));
    }
}

 

4. 공백이 포함되어있을 경우

public class Main {
    public static void main(String[] args) {
        String tmp = "111 ";
        
        System.out.println(Integer.parseInt(tmp));
    }
}

 

NumberFormatException 예외 처리

try-catch문을 이용해서 NumberFormatException 예외를 해결할 수 있다. 

catch문에 해당 예외가 발생하면 원하는 액션을 작성해 주면 된다.

public class Main {
    public static void main(String[] args) {
        
        try {
            String tmp = "111 ";
            System.out.println(Integer.parseInt(tmp));
        } catch (NumberFormatException e) {
            System.out.println("-- 에러 발생 --");
        }
    }
}


// -- 에러 발생 --

 

반응형