입력값이 정수인지 확인하기

JavaBeginner
지금 연습하기

소개

Java 애플리케이션을 개발할 때, 사용자 입력을 검증하는 것은 매우 중요한 작업입니다. 이 랩에서는 주어진 입력이 유효한 정수인지 확인하는 세 가지 일반적인 방법을 보여줍니다.

  1. Integer.parseInt() 메서드 사용
  2. Scanner.hasNextInt() 메서드 사용
  3. Character.isDigit() 메서드 사용

각 방법을 단계별로 구현하고, 그 차이점과 사용 사례를 이해할 것입니다.

Java 프로젝트 설정

정수 검증 메서드를 구현하기 위해 새로운 Java 파일을 만들어 보겠습니다.

  1. 터미널을 열고 /home/labex/project 디렉토리에 있는지 확인합니다:
pwd
  1. CheckInputInteger.java라는 새 Java 파일을 생성합니다:
touch CheckInputInteger.java
  1. 선호하는 텍스트 편집기에서 파일을 열고 기본 클래스 구조를 추가합니다:
import java.util.Scanner;

public class CheckInputInteger {
    public static void main(String[] args) {
        // 여기에 메서드 호출을 추가할 것입니다.
    }
}

Screenshot of the Java file with basic class structure

Integer.parseInt() 를 사용한 정수 검증 구현

Integer.parseInt() 메서드는 문자열을 정수로 변환하려고 시도합니다. 변환에 실패하면 NumberFormatException을 발생시킵니다. 이 동작을 사용하여 정수를 검증할 수 있습니다.

  1. 다음 메서드를 CheckInputInteger.java 파일에 추가합니다:
// CheckInputInteger 클래스 내부에 이 메서드를 추가합니다.
public static void checkUsingParseInt(String input) {
    try {
        // 입력 문자열을 정수로 파싱을 시도합니다.
        Integer.parseInt(input);
        System.out.println(input + " is a valid integer");
    } catch (NumberFormatException e) {
        // 파싱에 실패하면 입력은 유효한 정수가 아닙니다.
        System.out.println(input + " is not a valid integer");
    }
}
  1. 이 구현을 테스트하기 위해 main 메서드를 업데이트합니다:
// 이 구현을 테스트하기 위해 main 메서드를 수정합니다.
public static void main(String[] args) {
    // 테스트 케이스
    checkUsingParseInt("123");    // 유효한 정수
    checkUsingParseInt("12.34");  // 정수가 아님
    checkUsingParseInt("abc");    // 정수가 아님
}
  1. 파일은 다음과 같아야 합니다:
import java.util.Scanner;

public class CheckInputInteger {
    // 클래스 내부에 메서드를 정의합니다.
    public static void checkUsingParseInt(String input) {
        try {
            // 입력 문자열을 정수로 파싱을 시도합니다.
            Integer.parseInt(input);
            System.out.println(input + " is a valid integer");
        } catch (NumberFormatException e) {
            // 파싱에 실패하면 입력은 유효한 정수가 아닙니다.
            System.out.println(input + " is not a valid integer");
        }
    }

    public static void main(String[] args) {
        // 테스트 케이스
        checkUsingParseInt("123");    // 유효한 정수
        checkUsingParseInt("12.34");  // 정수가 아님
        checkUsingParseInt("abc");    // 정수가 아님
    }
}
  1. 프로그램을 컴파일하고 실행합니다:
javac CheckInputInteger.java
java CheckInputInteger

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

123 is a valid integer
12.34 is not a valid integer
abc is not a valid integer

Output of the Java program showing valid and invalid integer inputs

Scanner.hasNextInt() 를 사용한 정수 검증 구현

Scanner 클래스는 입력의 다음 토큰을 정수로 해석할 수 있는지 확인하는 hasNextInt() 메서드를 제공합니다. 이 메서드는 콘솔에서 사용자 입력을 읽을 때 특히 유용합니다.

  1. CheckInputInteger 클래스 내의 CheckInputInteger.java 파일에 다음 메서드를 추가합니다:
public static void checkUsingScanner(String input) {
    Scanner scanner = new Scanner(input);
    if (scanner.hasNextInt()) {
        System.out.println(input + " is a valid integer");
    } else {
        System.out.println(input + " is not a valid integer");
    }
    scanner.close();
}
  1. 이 구현에 대한 테스트를 포함하도록 main 메서드를 업데이트합니다:
public static void main(String[] args) {
    // 이전 테스트 케이스
    checkUsingParseInt("123");
    checkUsingParseInt("12.34");
    checkUsingParseInt("abc");

    // 새로운 테스트 케이스
    checkUsingScanner("456");     // 유효한 정수
    checkUsingScanner("-789");    // 유효한 정수
    checkUsingScanner("12.34");   // 정수가 아님
}
  1. 프로그램을 컴파일하고 실행합니다:
javac CheckInputInteger.java
java CheckInputInteger

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

456 is a valid integer
-789 is a valid integer
12.34 is not a valid integer

이는 Scanner.hasNextInt() 메서드가 유효하고 유효하지 않은 정수를 올바르게 식별함을 보여줍니다.

Output of Scanner hasNextInt method

Character.isDigit() 를 사용한 정수 검증 구현

Character.isDigit() 메서드는 문자가 숫자 자릿수인지 확인합니다. 입력 문자열의 각 문자를 검사하여 정수를 검증하는 데 사용할 수 있습니다.

  1. CheckInputInteger.java 파일에 다음 메서드를 추가합니다:
public static void checkUsingIsDigit(String input) {
    boolean isValid = true;

    // 첫 번째 문자를 확인하여 음수를 처리합니다.
    int startIndex = (input.charAt(0) == '-') ? 1 : 0;

    // 각 문자를 확인합니다.
    for (int i = startIndex; i < input.length(); i++) {
        if (!Character.isDigit(input.charAt(i))) {
            isValid = false;
            break;
        }
    }

    if (isValid) {
        System.out.println(input + " is a valid integer");
    } else {
        System.out.println(input + " is not a valid integer");
    }
}
  1. 최종 테스트 케이스로 main 메서드를 업데이트합니다:
public static void main(String[] args) {
    // 이전 테스트 케이스
    checkUsingParseInt("123");
    checkUsingParseInt("12.34");
    checkUsingParseInt("abc");

    checkUsingScanner("456");
    checkUsingScanner("-789");
    checkUsingScanner("12.34");

    // 새로운 테스트 케이스
    checkUsingIsDigit("789");     // 유효한 정수
    checkUsingIsDigit("-123");    // 유효한 정수
    checkUsingIsDigit("12.34");   // 정수가 아님
}
  1. 프로그램의 최종 버전을 컴파일하고 실행합니다:
javac CheckInputInteger.java
java CheckInputInteger

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

789 is a valid integer
-123 is a valid integer
12.34 is not a valid integer

Output of the program showing valid and invalid integer checks

요약

이 랩에서는 Java 에서 정수 입력을 검증하는 세 가지 다른 방법을 살펴보았습니다.

  1. 간단하지만 예외 처리가 필요한 Integer.parseInt() 메서드
  2. 사용자 입력을 읽는 데 탁월한 Scanner.hasNextInt() 메서드
  3. 문자별 검증을 제공하는 Character.isDigit() 메서드

각 방법에는 장점과 사용 사례가 있습니다. parseInt() 메서드는 간단한 문자열 - 정수 변환에 적합하고, Scanner.hasNextInt()는 사용자 입력을 읽는 데 매우 뛰어나며, Character.isDigit()는 검증 프로세스에 대한 가장 많은 제어를 제공합니다.

이러한 검증 기술은 사용자 입력을 안전하고 효과적으로 처리할 수 있는 강력한 Java 애플리케이션을 개발하는 데 필수적입니다.