It's Ward

JAVA - Integer.parseInt() 예외처리 본문

Java/오늘의 삽질 - Truble Shooting

JAVA - Integer.parseInt() 예외처리

I'm ward 2022. 5. 26. 02:28

삽질시간 : 무려 1시간..

문제사항 : 입력받은 데이터 혹은 Integer.parseInt() 로 변환한 타입이 int가 아닐 경우 오류 발생 (정수뿐만이 아닌 다른타입의 경우에도 동일할 것이다.)

해결 방법 : NumberFormatException try&catch 를 이용한 메소드 제작 및 예외처리 

 

예외 처리라는것은 이전부터 어느정도 느낌적인 느낌으로 알고있었는데 정확하게 사용해본적은 없었다.

이번에 가상으로 물품과 재고를 등록하는 간단한 예시 프로그램을 작성하는데, 숫자를 입력해야하는 부분에 자꾸 문자가 들어가는 경우가 많이 발생하였다.

이런 실수가 생기게 되면, 컴파일은 정상적으로 작동되나, 런타임에서 오류가 발생하게 되는데 바로 NumberFormatException이다.

 

입력 받는 메소드
번호를 입력해야하는데 문자를 입력한 경우..이다

한마디로 숫자가 들어가야하는 형식인데 너가 parseInt에 넣은건 그게 아니다 라는것이다.

IOException 이 있으니까 catch문에 넣으면 되는거 아닌가? 라고 한때 생각을 했지만, IOException 는 입/출력이 잘못되었을 경우 나오는 예외이고, 실제 오류 메세지는 NumberFormatException 이기 때문에 해당 예외처리를 몰랐던 나는 헤메게 되었다.

물론 간단한 프로그램이고 기본 지시사항에는 없었던 내용이지만.. 

내가 프로그래머로서 누군가 조작으로 예외사항이 발생하였을 때, 처리할 수 있는것은 당연하게 생각해야하는 부분이였고, 저렇게 간단한 프로그램인데 이런것 조차 해결하지 못한다면 나아갈 수 없을거라 생각했다.

해결방법은 정말 간단했다.  

catch NumberFormatException 을 추가하여 잘못된 데이터가 들어올 경우 다시 데이터를 받을 수 있도록 제작하였다.

private static int inputInteger(BufferedReader bufferedReader) {                     
//입력 데이터가 숫자가 아닌경우 다시 입력받도록 하는 메소드
    String str = "";
    int num = 0;

    try {
        num = Integer.parseInt(bufferedReader.readLine());  //정상적일경우 num에 데이터 입력
    } catch (IOException | NumberFormatException e) {    //에러 발생일 경우
        System.out.println("[System] 잘못된 입력입니다. 다시 입력하세요.");
        return inputInteger(bufferedReader);     //재귀함수(자기자신 다시 실행)
    }

    return num;
    //int값 반환
}

해당 오류를 해결하기 위해 예외처리에 대해 자세하게 알아볼 수 있는 시간이 되었고, 다른 프로그램에도 적용 할 수 있게되었다. 

Comments