Java 에서 숫자가 Double 인지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 숫자가 double 인지 확인하는 방법을 배우게 됩니다. instanceof 연산자를 사용하여 객체가 Double 래퍼 클래스의 인스턴스인지 확인하는 것부터 시작하여 다양한 기술을 살펴볼 것입니다.

그 다음, 문자열을 double 로 파싱하고 잠재적인 오류를 처리하는 방법을 배우게 됩니다. 마지막으로, 올바른 숫자 표현을 사용하고 있는지 확인하기 위해 DoubleInteger 유형을 구별하는 방법을 다룰 것입니다.

Double 클래스 인스턴스 확인

이 단계에서는 Java 의 Double 클래스를 살펴보고 객체가 이 클래스의 인스턴스인지 확인하는 방법을 배우겠습니다. Java 에서 double과 같은 기본 데이터 타입에는 Double과 같은 해당 래퍼 클래스가 있습니다. Double 클래스는 double-precision 부동 소수점 숫자 작업에 유용한 메서드를 제공합니다.

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

이제 편집기에서 DoubleCheck.java 파일을 열고 다음 코드를 추가합니다.

public class DoubleCheck {
    public static void main(String[] args) {
        // Declare a primitive double variable
        double primitiveDouble = 123.45;

        // Declare a Double object
        Double doubleObject = 67.89;

        // Declare an Integer object
        Integer integerObject = 100;

        // Check if primitiveDouble is an instance of Double (This will not work directly)
        // System.out.println("Is primitiveDouble an instance of Double? " + (primitiveDouble instanceof Double)); // This line would cause a compile error

        // Check if doubleObject is an instance of Double
        System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));

        // Check if integerObject is an instance of Double
        System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
    }
}

이 코드에서:

  • 기본 double 변수 primitiveDouble을 선언합니다.
  • Double 객체 doubleObject를 선언합니다.
  • 비교를 위해 Integer 객체 integerObject를 선언합니다.
  • instanceof 연산자를 사용하여 doubleObjectintegerObjectDouble 클래스의 인스턴스인지 확인합니다.
  • instanceof 연산자는 double과 같은 기본 타입과 직접 사용할 수 없다는 점에 유의하십시오.

DoubleCheck.java 파일을 저장합니다.

이제 프로그램을 컴파일하고 실행해 보겠습니다. WebIDE 하단의 터미널을 엽니다. ~/project 디렉토리에 있는지 확인합니다.

javac를 사용하여 코드를 컴파일합니다.

javac DoubleCheck.java

컴파일 오류가 없으면 java를 사용하여 컴파일된 코드를 실행합니다.

java DoubleCheck

다음과 유사한 출력을 볼 수 있습니다.

Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false

이 출력은 doubleObjectDouble 클래스의 인스턴스이고 integerObject는 그렇지 않음을 확인합니다. 이는 Java 에서 instanceof 연산자를 사용하여 객체의 유형을 확인하는 방법을 보여줍니다.

문자열을 Double 로 파싱

이 단계에서는 숫자를 나타내는 String을 Java 에서 double 값으로 변환하는 방법을 배우겠습니다. 이는 사용자 입력이나 파일에서 읽는 등 텍스트로 숫자 입력을 받을 때 흔히 발생하는 작업입니다. Double 클래스는 이 목적으로 특별히 parseDouble()이라는 정적 메서드를 제공합니다.

~/project 디렉토리에 StringtoDouble.java라는 새 Java 파일을 생성해 보겠습니다. WebIDE 의 파일 탐색기를 사용하여 이 파일을 생성합니다.

StringtoDouble.java를 열고 다음 코드를 추가합니다.

public class StringtoDouble {
    public static void main(String[] args) {
        // A string representing a double value
        String doubleString = "987.65";

        // Another string representing a double value
        String anotherDoubleString = "3.14159";

        // A string that is not a valid double
        String invalidDoubleString = "hello";

        // Parse the strings to double values
        try {
            double parsedDouble1 = Double.parseDouble(doubleString);
            double parsedDouble2 = Double.parseDouble(anotherDoubleString);

            System.out.println("Parsed double from \"" + doubleString + "\": " + parsedDouble1);
            System.out.println("Parsed double from \"" + anotherDoubleString + "\": " + parsedDouble2);

            // Attempt to parse an invalid string (This will cause an error)
            // double parsedDouble3 = Double.parseDouble(invalidDoubleString);
            // System.out.println("Parsed double from \"" + invalidDoubleString + "\": " + parsedDouble3);

        } catch (NumberFormatException e) {
            System.out.println("Error parsing string: " + e.getMessage());
        }
    }
}

이 코드에서:

  • 유효한 double 숫자를 포함하는 두 개의 문자열 doubleStringanotherDoubleString이 있습니다.
  • 유효한 숫자를 나타내지 않는 invalidDoubleString도 있습니다.
  • Double.parseDouble()을 사용하여 유효한 문자열을 double 기본 값으로 변환합니다.
  • 파싱 코드를 try-catch 블록으로 묶습니다. 문자열을 유효한 double 로 파싱할 수 없는 경우 (invalidDoubleString과 같은 경우) parseDouble()NumberFormatException을 발생시키기 때문에 이는 중요합니다. catch 블록은 이 오류를 적절하게 처리합니다.

StringtoDouble.java 파일을 저장합니다.

이제 프로그램을 컴파일하고 실행해 보겠습니다. 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다.

코드를 컴파일합니다.

javac StringtoDouble.java

컴파일된 코드를 실행합니다.

java StringtoDouble

다음과 유사한 출력을 볼 수 있습니다.

Parsed double from "987.65": 987.65
Parsed double from "3.14159": 3.14159

invalidDoubleString을 파싱하려는 줄의 주석 처리를 해제하고 코드를 다시 실행하면 catch 블록의 오류 메시지가 표시되어 프로그램이 잘못된 입력을 처리하는 방식을 보여줍니다.

이 단계에서는 숫자 문자열 표현을 실제 double 값으로 변환하는 방법을 보여줍니다. 이는 Java 프로그램에서 입력을 처리하는 데 필수적인 기술입니다.

Double 과 Integer 구분하기

이 단계에서는 Java 에서 doubleint (정수) 값의 차이점을 살펴보고, 특히 유사하게 보이는 숫자를 다룰 때 어떻게 구분하는지 알아보겠습니다. double은 소수점이 있는 숫자와 정수를 모두 나타낼 수 있지만, int는 정수만 나타낼 수 있습니다. 이 차이점을 이해하는 것은 올바른 데이터 타입을 선택하고 정확한 계산을 수행하는 데 매우 중요합니다.

WebIDE 의 파일 탐색기를 사용하여 ~/project 디렉토리에 NumberTypes.java라는 새 Java 파일을 생성해 보겠습니다.

NumberTypes.java를 열고 다음 코드를 추가합니다.

public class NumberTypes {
    public static void main(String[] args) {
        // An integer variable
        int integerValue = 10;

        // A double variable representing a whole number
        double doubleValueWhole = 20.0;

        // A double variable representing a number with a decimal part
        double doubleValueDecimal = 30.5;

        // Print the values and their types (implicitly)
        System.out.println("Integer value: " + integerValue);
        System.out.println("Double value (whole): " + doubleValueWhole);
        System.out.println("Double value (decimal): " + doubleValueDecimal);

        // Check the type using instanceof (for wrapper classes)
        Integer integerObject = 100;
        Double doubleObject = 200.0;

        System.out.println("Is integerObject an instance of Integer? " + (integerObject instanceof Integer));
        System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));
        System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
        System.out.println("Is doubleObject an instance of Integer? " + (doubleObject instanceof Integer));

        // Demonstrate potential issues with comparing double and int
        System.out.println("Is integerValue equal to doubleValueWhole? " + (integerValue == doubleValueWhole)); // This comparison works due to type promotion
        // System.out.println("Is integerValue equal to doubleValueDecimal? " + (integerValue == doubleValueDecimal)); // This would be false
    }
}

이 코드에서:

  • int 변수 integerValue를 선언합니다.
  • 두 개의 double 변수를 선언하는데, 하나는 정수 (doubleValueWhole) 를 나타내고 다른 하나는 소수 부분이 있는 숫자 (doubleValueDecimal) 를 나타냅니다.
  • 이러한 값을 출력하여 표현을 관찰합니다.
  • 첫 번째 단계에서 했던 것과 유사하게, 래퍼 클래스 IntegerDouble과 함께 instanceof 연산자를 사용하여 객체 유형을 명시적으로 확인합니다.
  • 또한 intdouble 간의 비교를 보여줍니다. Java 는 타입 프로모션을 수행하여 비교 전에 intdouble로 변환하므로 integerValue == doubleValueWholetrue로 평가됩니다.

NumberTypes.java 파일을 저장합니다.

이제 프로그램을 컴파일하고 실행해 보겠습니다. 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다.

코드를 컴파일합니다.

javac NumberTypes.java

컴파일된 코드를 실행합니다.

java NumberTypes

다음과 유사한 출력을 볼 수 있습니다.

Integer value: 10
Double value (whole): 20.0
Double value (decimal): 30.5
Is integerObject an instance of Integer? true
Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false
Is doubleObject an instance of Integer? false
Is integerValue equal to doubleValueWhole? true

이 출력은 intdouble 값이 저장되고 표현되는 방식의 차이점과 래퍼 클래스와 함께 instanceof를 사용하여 해당 유형을 확인하는 방법을 보여줍니다. double은 정수 값을 가질 수 있지만, 근본적으로 정수 유형과는 구별되는 부동 소수점 유형입니다.

요약

이 Lab 에서는 Java 에서 숫자가 Double인지 확인하는 방법을 배웠습니다. Double 래퍼 클래스를 살펴보고 instanceof 연산자를 사용하여 객체가 Double의 인스턴스인지 확인하는 것으로 시작했습니다. instanceofDouble 객체와 함께 작동하지만 기본 double 타입과는 직접적으로 작동하지 않는다는 것을 확인했습니다.