Java 에서 문자열을 정수로 변환할 수 있는지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 문자열을 정수로 변환할 수 있는지 확인하는 방법을 배우게 됩니다. 이는 사용자 입력 또는 외부 소스에서 가져온 데이터를 처리하는 데 필요한 기본적인 기술입니다.

변환을 시도하기 위해 Integer.parseInt() 메서드를 살펴보고, NumberFormatException을 사용하여 잠재적인 오류를 처리하는 방법을 배우며, 문자열을 파싱 (parsing) 하기 전에 유효성을 검사하여 견고하고 오류 없는 코드를 보장하는 기술을 익힐 것입니다.

Integer.parseInt() 로 파싱 시도

이 단계에서는 Java 에서 String (텍스트) 을 int (정수) 로 변환하는 방법을 살펴보겠습니다. 이는 프로그래밍에서 흔히 사용되는 작업이며, 특히 사용자로부터 숫자 입력을 받거나 파일에서 숫자를 읽어야 할 때 필요합니다.

Java 는 이를 위해 Integer.parseInt()라는 내장 메서드를 제공합니다. 어떻게 작동하는지 살펴보겠습니다.

  1. 먼저, ~/project 디렉토리에 있는지 확인합니다. 필요한 경우 터미널에서 cd ~/project 명령을 사용할 수 있습니다.

  2. 이제 ~/project 디렉토리에 StringToInt.java라는 새 Java 파일을 생성해 보겠습니다. 왼쪽의 파일 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택한 다음 StringToInt.java를 입력하여 이 작업을 수행할 수 있습니다.

  3. 코드 편집기에서 StringToInt.java 파일을 열고 다음 코드를 붙여넣습니다.

    public class StringToInt {
        public static void main(String[] args) {
            String numberString = "123";
            int numberInt = Integer.parseInt(numberString);
    
            System.out.println("The string is: " + numberString);
            System.out.println("The integer is: " + numberInt);
        }
    }

    새로운 부분을 살펴보겠습니다.

    • String numberString = "123";: numberString이라는 String 변수를 선언하고 값 "123"을 할당합니다. "123"이 큰따옴표로 묶여 있어 문자열임을 나타냅니다.
    • int numberInt = Integer.parseInt(numberString);: 이것이 이 단계의 핵심입니다. Integer.parseInt() 메서드를 호출하고 numberString을 인수로 전달합니다. 이 메서드는 문자열 "123"을 정수로 변환하려고 시도합니다. 결과는 numberInt라는 int 변수에 저장됩니다.
    • System.out.println("The string is: " + numberString);: 이 줄은 원래 문자열을 출력합니다.
    • System.out.println("The integer is: " + numberInt);: 이 줄은 변환된 정수를 출력합니다.
  4. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  5. 이제 프로그램을 컴파일해 보겠습니다. 터미널을 열고 다음 명령을 실행합니다.

    javac StringToInt.java

    컴파일이 성공하면 출력이 표시되지 않으며 ~/project 디렉토리에 StringToInt.class 파일이 생성됩니다.

  6. 마지막으로, 컴파일된 프로그램을 실행합니다.

    java StringToInt

    다음 출력을 볼 수 있습니다.

    The string is: 123
    The integer is: 123

    보시다시피, Integer.parseInt() 메서드는 문자열 "123"을 정수 123으로 성공적으로 변환했습니다.

다음 단계에서는 문자열을 정수로 변환할 수 없는 경우 어떻게 되는지 살펴보겠습니다.

NumberFormatException 처리

이전 단계에서는 숫자만 포함된 문자열을 Integer.parseInt()를 사용하여 정수로 성공적으로 변환했습니다. 하지만 문자열에 숫자가 아닌 문자가 포함되어 있다면 어떻게 될까요? 알아보겠습니다.

Integer.parseInt()가 숫자의 유효한 표현이 아닌 문자열을 변환하려고 시도하면 NumberFormatException을 발생시킵니다. 이는 숫자 문자열의 형식에 문제가 있음을 나타내는 오류 유형입니다.

이러한 오류를 적절하게 처리하기 위해 try-catch 블록을 사용할 수 있습니다. try-catch 블록을 사용하면 오류를 발생시킬 수 있는 코드 조각을 "시도"하고, 오류가 발생하면 이를 "잡아" 특정 방식으로 처리하여 프로그램이 충돌하는 것을 방지할 수 있습니다.

StringToInt.java 프로그램을 수정하여 이를 시연해 보겠습니다.

  1. WebIDE 편집기에서 StringToInt.java 파일을 엽니다.

  2. try-catch 블록을 포함하고 입력 문자열을 변경하도록 코드를 수정합니다.

    public class StringToInt {
        public static void main(String[] args) {
            String numberString = "abc"; // This string cannot be parsed as an integer
    
            try {
                int numberInt = Integer.parseInt(numberString);
                System.out.println("The string is: " + numberString);
                System.out.println("The integer is: " + numberInt);
            } catch (NumberFormatException e) {
                System.out.println("Error: Could not convert the string to an integer.");
                System.out.println("Details: " + e.getMessage());
            }
        }
    }

    다음과 같은 내용을 추가했습니다.

    • String numberString = "abc";: 문자열을 "abc"로 변경했습니다. 이는 분명히 유효한 정수가 아닙니다.
    • try { ... }: try 블록 내부의 코드는 시도하려는 것입니다. 이 경우 Integer.parseInt() 호출입니다.
    • catch (NumberFormatException e) { ... }: try 블록 내에서 NumberFormatException이 발생하면 catch 블록 내부의 코드가 실행됩니다.
    • System.out.println("Error: Could not convert the string to an integer.");: 이 줄은 사용자 친화적인 오류 메시지를 출력합니다.
    • System.out.println("Details: " + e.getMessage());: 이 줄은 예외에 대한 자세한 내용을 출력하며, 디버깅에 도움이 될 수 있습니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 터미널에서 수정된 프로그램을 컴파일합니다.

    javac StringToInt.java
  5. 컴파일된 프로그램을 실행합니다.

    java StringToInt

    이번에는 "abc"를 정수로 파싱할 수 없으므로 NumberFormatException이 잡히고 다음과 유사한 출력을 볼 수 있습니다.

    Error: Could not convert the string to an integer.
    Details: For input string: "abc"

    프로그램이 충돌하는 대신 catch 블록이 오류를 처리하고 유용한 메시지를 출력했습니다. 이는 훨씬 더 나은 사용자 경험입니다!

try-catch 블록을 사용하는 것은 예기치 않은 입력 또는 상황을 처리할 수 있는 강력한 프로그램을 작성하는 데 매우 중요합니다.

파싱 전 문자열 유효성 검사

이전 단계에서는 Integer.parseInt()가 실패할 때 NumberFormatException을 잡는 방법을 배웠습니다. 예외를 잡는 것은 오류를 처리하는 데 중요하지만, 처음부터 오류가 발생하지 않도록 하는 것이 더 나은 경우가 많습니다.

이 단계에서는 문자열을 정수로 파싱을 시도하기 전에 문자열의 유효성을 검사하는 방법을 배우겠습니다. 여기에는 문자열에 숫자만 포함되어 있는지 확인하는 작업이 포함됩니다.

이 작업을 수행하는 한 가지 방법은 문자열의 각 문자를 반복하고 숫자인지 확인하는 것입니다. 또 다른 일반적인 접근 방식은 정규 표현식 (regular expression) 을 사용하는 것이지만, 초보자의 경우 간단한 루프가 이해하기 더 쉽습니다.

StringToInt.java 프로그램을 다시 수정하여 유효성 검사를 포함해 보겠습니다.

  1. WebIDE 편집기에서 StringToInt.java 파일을 엽니다.

  2. 기존 코드를 다음으로 바꿉니다.

    public class StringToInt {
    
        public static void main(String[] args) {
            String numberString = "123a"; // This string contains a non-digit character
    
            if (isValidInteger(numberString)) {
                int numberInt = Integer.parseInt(numberString);
                System.out.println("The string is: " + numberString);
                System.out.println("The integer is: " + numberInt);
            } else {
                System.out.println("Error: The string '" + numberString + "' is not a valid integer.");
            }
        }
    
        // Method to check if a string is a valid integer
        public static boolean isValidInteger(String str) {
            if (str == null || str.isEmpty()) {
                return false; // An empty or null string is not a valid integer
            }
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                if (i == 0 && (c == '-' || c == '+')) {
                    // Allow a leading sign (+ or -)
                    continue;
                }
                if (!Character.isDigit(c)) {
                    return false; // Found a non-digit character
                }
            }
            return true; // All characters are digits (or a leading sign)
        }
    }

    변경 사항을 살펴보겠습니다.

    • isValidInteger(String str)이라는 새 메서드를 추가했습니다. 이 메서드는 문자열을 입력으로 받아 문자열이 유효한 정수를 나타내면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
    • isValidInteger 내부에서 먼저 문자열이 null 이거나 비어 있는지 확인합니다.
    • 그런 다음 문자열의 각 문자를 반복합니다.
    • Character.isDigit(c)는 문자가 숫자인지 확인하는 내장 Java 메서드입니다.
    • 선행 부호 (플러스 또는 마이너스) 를 허용하도록 검사를 추가했습니다.
    • main 메서드에서 이제 if-else 문을 사용합니다. 파싱을 시도하기 전에 isValidInteger()를 호출하여 문자열을 확인합니다.
    • isValidInteger()true를 반환하면 Integer.parseInt()를 진행합니다.
    • false를 반환하면 파싱을 시도하지 않고 오류 메시지를 출력하여 NumberFormatException을 방지합니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 터미널에서 수정된 프로그램을 컴파일합니다.

    javac StringToInt.java
  5. 컴파일된 프로그램을 실행합니다.

    java StringToInt

    문자열 "123a"에는 숫자가 아닌 문자가 포함되어 있으므로 isValidInteger 메서드는 false를 반환하고 다음과 같은 출력을 볼 수 있습니다.

    Error: The string '123a' is not a valid integer.

    이제 문자열을 다시 유효한 정수로 변경하여 if-else 문의 다른 분기를 살펴보겠습니다.

  6. StringToInt.java 파일에서 numberString 변수를 다시 "456"으로 변경합니다.

    String numberString = "456";
  7. 파일을 저장합니다.

  8. 프로그램을 다시 컴파일하고 실행합니다.

    javac StringToInt.java
    java StringToInt

    이번에는 isValidIntegertrue를 반환하고 다음을 볼 수 있습니다.

    The string is: 456
    The integer is: 456

    파싱 전에 문자열의 유효성을 검사함으로써 NumberFormatException과 같은 런타임 오류를 방지하고, 잘못된 입력을 보다 원활하게 처리할 수 있습니다. 이는 보다 강력하고 안정적인 코드를 작성하기 위한 좋은 방법입니다.

요약

이 Lab 에서는 Integer.parseInt() 메서드를 사용하여 Java 에서 Stringint로 변환하는 방법을 배웠습니다. Java 파일을 생성하고, 변환을 시연하는 코드를 작성하고, 프로그램을 컴파일했습니다. 이 메서드는 다양한 소스에서 숫자 입력을 처리하는 데 필수적입니다.