본문 바로가기

코딩공부

Java NumberFormatException e 에 대한 정리

혼자 강의 들으면서 간단하게 환전하는 코드를 짜다가 예외처리 과정에서 궁금한 점이 생겨 찾아본 점을 정리해봅니다.

 

아래는 해당 질문에 대한 생성형 ai의 답변입니다.

 

---

NumberFormatException이란 무엇일까요?

NumberFormatException은 간단히 말해서, 숫자가 아닌 문자열을 숫자로 변환하려고 할 때 발생하는 오류입니다. 컴퓨터는 숫자와 문자를 구분하기 때문에, 숫자가 아닌 문자열을 숫자로 처리하려고 하면 오류가 발생하는 것입니다.

좀 더 쉽게 설명하자면, 다음과 같은 상황에서 NumberFormatException이 발생할 수 있습니다.

  • 숫자가 아닌 문자를 포함하는 문자열을 숫자로 변환하려고 할 때: 예를 들어, "hello" 또는 "apple"과 같은 문자열을 숫자로 변환하려고 하면 오류가 발생합니다.
  • 잘못된 형식의 숫자 문자열을 변환하려고 할 때: 예를 들어, "123.45a"와 같은 문자열을 숫자로 변환하려고 하면 오류가 발생합니다. 숫자 문자열은 숫자만 포함해야 하며, 소수점이 있는 경우에는 소수점 앞뒤로 숫자가 있어야 합니다.
  • 문자열이 너무 길거나 짧을 때: 일부 프로그래밍 언어에서는 숫자로 변환할 수 있는 문자열의 길이에 제한이 있습니다. 예를 들어, Java에서는 32비트 정수를 나타내는 문자열의 길이는 최대 10자리여야 합니다.

NumberFormatException을 해결하는 방법

NumberFormatException을 해결하려면 다음과 같은 방법을 시도할 수 있습니다.

  • 문자열이 숫자 형식인지 확인합니다. 숫자가 아닌 문자가 포함되어 있거나, 잘못된 형식인 경우에는 문자열을 수정해야 합니다.
  • 올바른 변환 메서드를 사용합니다. 예를 들어, 문자열을 정수로 변환하려면 parseInt() 메서드를 사용하고, 실수로 변환하려면 parseDouble() 메서드를 사용해야 합니다.
  • 문자열의 길이가 제한 범위 내에 있는지 확인합니다. 문자열이 너무 길거나 짧으면 잘라내거나 패딩해야 합니다.

(NumberFormatException e) 에서 e는 예외 객체를 의미합니다. 예외 객체는 프로그램 실행 중에 발생한 오류나 문제에 대한 정보를 담고 있는 객체입니다. NumberFormatException의 경우, e 객체는 숫자 형식 오류에 대한 정보를 담고 있습니다.

좀 더 쉽게 설명하자면, e 객체는 다음과 같은 정보를 가지고 있습니다.

  • 오류 메시지: 오류의 원인을 설명하는 메시지입니다.
  • 오류 발생 위치: 오류가 발생한 코드의 위치를 나타내는 정보입니다.
  • 오류 스택 트레이스: 오류가 발생하기까지 실행된 코드 경로를 나타내는 정보입니다.

개발자는 e 객체를 사용하여 오류의 원인을 파악하고 해결할 수 있습니다. 예를 들어, e.getMessage() 메서드를 사용하여 오류 메시지를 출력하고, e.printStackTrace() 메서드를 사용하여 오류 스택 트레이스를 출력할 수 있습니다.

 

다음은 e 객체를 사용하는 예제입니다.

try {
  int num = Integer.parseInt("abc");
} catch (NumberFormatException e) {
  System.out.println("오류 메시지: " + e.getMessage());
  System.out.println("오류 발생 위치: " + e.getStackTrace()[0]);
}

 

 

위 코드는 "abc" 문자열을 숫자로 변환하려고 시도합니다. 하지만 "abc"는 숫자가 아니기 때문에 NumberFormatException이 발생합니다. 이때 catch 블록에서 e 객체를 사용하여 오류 메시지와 오류 발생 위치를 출력합니다.

NumberFormatException 외에도 다양한 예외가 발생할 수 있으며, 각 예외 객체에는 해당 예외에 대한 정보가 담겨 있습니다. 따라서 개발자는 예외 객체를 활용하여 프로그램의 오류를 효과적으로 처리할 수 있습니다.

 

try-catch 구문에서 NumberFormatException e를 사용할 때, e는 별도의 선언이 필요없는 객체입니다.

try-catch 구문은 예외 처리를 위한 문법으로, try 블록 안에서 발생할 수 있는 예외를 catch 블록으로 처리하도록 합니다. catch 블록에는 예외 객체를 나타내는 변수가 선언되며, 이 변수에는 발생한 예외 객체가 자동으로 할당됩니다.

따라서 NumberFormatException e와 같이 변수를 선언할 때, 별도의 선언이 필요하지 않습니다. e는 이미 catch 블록 안에서 발생한 NumberFormatException 예외 객체를 나타내는 변수로 자동적으로 선언된 것입니다.

 

예제:

try {
  int num = Integer.parseInt("abc");
} catch (NumberFormatException e) {
  System.out.println("오류 메시지: " + e.getMessage());
}
 

위 코드에서 e는 별도의 선언 없이 사용되고 있습니다. 하지만 e는 try 블록 안에서 발생한 NumberFormatException 예외 객체를 나타내는 변수입니다.

 

참고:

  • catch 블록에서 예외 객체를 나타내는 변수 이름은 자유롭게 지정할 수 있습니다. 예를 들어, NumberFormatException exception 또는 NumberFormatException error와 같이 선언해도 됩니다.
  • 여러 개의 예외를 처리하려면 여러 개의 catch 블록을 사용할 수 있습니다. 예를 들어, 다음과 같이 NullPointerException과 NumberFormatException을 동시에 처리할 수 있습니다.
try {
  int num = Integer.parseInt(null);
} catch (NullPointerException e) {
  System.out.println("NullPointerException 발생");
} catch (NumberFormatException e) {
  System.out.println("NumberFormatException 발생");
}