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

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 숫자가 Long 타입인지 확인하는 다양한 방법을 살펴봅니다. 먼저, 객체가 Long 래퍼 클래스의 인스턴스인지 확인하기 위해 instanceof 연산자를 사용하는 방법을 배웁니다.

그 다음, 문자열을 Long 값으로 파싱하는 방법을 자세히 살펴보고, 이 과정에서 발생할 수 있는 잠재적인 오류를 처리하는 방법을 이해합니다. 마지막으로, Long 타입과 Integer 타입을 구분하여 주요 차이점과 각 타입을 효과적으로 사용하는 방법을 강조합니다.

Long 클래스 인스턴스 확인

이 단계에서는 Java 의 Long 클래스를 살펴보고 객체가 Long 클래스의 인스턴스인지 확인하는 방법을 배웁니다.

Java 에서 long과 같은 기본 데이터 타입은 객체가 아닙니다. 그러나 Java 는 각 기본 타입에 대한 래퍼 클래스를 제공하며, Longlong 기본 타입의 래퍼 클래스입니다. 래퍼 클래스를 사용하면 기본 값을 객체로 처리할 수 있으며, 컬렉션 작업과 같은 많은 상황에서 유용합니다.

객체가 특정 클래스의 인스턴스인지 확인하려면 instanceof 연산자를 사용합니다. instanceof 연산자는 객체가 클래스, 서브클래스 또는 인터페이스의 인스턴스인지 테스트하는 데 사용되는 이항 연산자입니다.

Long 클래스와 함께 instanceof 연산자를 사용하는 방법을 보여주는 간단한 Java 프로그램을 만들어 보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다 (아직 열려 있지 않은 경우).

  2. 파일의 전체 내용을 다음 코드로 바꿉니다.

    public class HelloJava {
        public static void main(String[] args) {
            // Create a Long object
            Long myLong = 12345L;
    
            // Create an Integer object
            Integer myInteger = 67890;
    
            // Check if myLong is an instance of Long
            if (myLong instanceof Long) {
                System.out.println("myLong is an instance of Long.");
            } else {
                System.out.println("myLong is not an instance of Long.");
            }
    
            // Check if myInteger is an instance of Long
            if (myInteger instanceof Long) {
                System.out.println("myInteger is an instance of Long.");
            } else {
                System.out.println("myInteger is not an instance of Long.");
            }
        }
    }

    이 코드에서:

    • 12345LmyLong이라는 Long 객체를 생성합니다. L 접미사는 long 리터럴임을 나타냅니다.
    • 67890으로 myInteger라는 Integer 객체를 생성합니다.
    • instanceof 연산자를 사용하여 myLongLong의 인스턴스인지 확인합니다.
    • instanceof 연산자를 사용하여 myIntegerLong의 인스턴스인지 확인합니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 터미널에서 다음 명령을 실행하여 프로그램을 컴파일합니다.

    javac HelloJava.java

    컴파일이 성공하면 아무런 출력이 표시되지 않습니다.

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

    java HelloJava

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

    myLong is an instance of Long.
    myInteger is not an instance of Long.

이 출력은 Long 객체로 생성한 myLong이 실제로 Long 클래스의 인스턴스이고, Integer 객체로 생성된 myInteger는 그렇지 않음을 확인합니다.

문자열을 Long 으로 파싱

이 단계에서는 숫자의 String 표현을 Long 객체 또는 long 기본 타입으로 변환하는 방법을 배웁니다. 이는 사용자 입력이나 파일에서 텍스트로 숫자 데이터를 수신할 때 흔히 발생하는 작업입니다.

Long 클래스는 이 변환을 수행하기 위한 정적 메서드를 제공합니다. 가장 일반적으로 사용되는 두 가지 메서드는 다음과 같습니다.

  • Long.parseLong(String s): 이 메서드는 문자열 인수를 부호 있는 10 진수 long으로 파싱합니다. 기본 long 값을 반환합니다.
  • Long.valueOf(String s): 이 메서드는 문자열 인수로 표현된 값을 보유하는 Long 객체를 반환합니다.

HelloJava.java 프로그램을 수정하여 문자열을 longLong으로 파싱하는 방법을 시연해 보겠습니다.

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

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

    public class HelloJava {
        public static void main(String[] args) {
            String numberString = "9876543210";
    
            // Parse the string to a primitive long
            long primitiveLong = Long.parseLong(numberString);
            System.out.println("Parsed primitive long: " + primitiveLong);
    
            // Parse the string to a Long object
            Long longObject = Long.valueOf(numberString);
            System.out.println("Parsed Long object: " + longObject);
    
            // Demonstrate parsing a different string
            String anotherNumberString = "112233445566";
            long anotherPrimitiveLong = Long.parseLong(anotherNumberString);
            System.out.println("Parsed another primitive long: " + anotherPrimitiveLong);
        }
    }

    이 코드에서:

    • 텍스트 "9876543210"을 포함하는 String 변수 numberString을 정의합니다.
    • Long.parseLong()을 사용하여 numberString을 기본 long으로 변환하고 primitiveLong에 저장합니다.
    • Long.valueOf()를 사용하여 numberStringLong 객체로 변환하고 longObject에 저장합니다.
    • 다른 문자열을 파싱하여 메서드의 유연성을 보여줍니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 프로그램을 컴파일합니다.

    javac HelloJava.java

    컴파일 오류가 없는지 확인합니다.

  5. 프로그램을 실행합니다.

    java HelloJava

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

    Parsed primitive long: 9876543210
    Parsed Long object: 9876543210
    Parsed another primitive long: 112233445566

이 출력은 Long.parseLong()Long.valueOf()가 모두 숫자 문자열 표현을 해당 longLong 값으로 성공적으로 변환했음을 보여줍니다.

문자열에 long으로 표현할 수 있는 유효한 숫자가 포함되어 있지 않으면 이러한 메서드가 NumberFormatException을 발생시킨다는 점에 유의해야 합니다. 이 기본적인 랩에서는 오류 처리를 다루지 않지만, 실제 애플리케이션에서는 염두에 두어야 할 사항입니다.

Long 과 Integer 의 차이점 구별

이 단계에서는 Java 에서 long (및 래퍼 클래스 Long) 과 int (및 래퍼 클래스 Integer) 의 주요 차이점을 이해하는 데 중점을 둡니다. 둘 다 정수를 저장하는 데 사용되지만, 저장할 수 있는 값의 범위와 메모리 사용량에서 상당한 차이가 있습니다.

주요 차이점은 크기에 있습니다.

  • int: int는 32 비트 부호 있는 2 의 보수 정수입니다. 즉, -2,147,483,648 에서 2,147,483,647 까지의 값을 저장할 수 있습니다.
  • long: long은 64 비트 부호 있는 2 의 보수 정수입니다. 이를 통해 -9,223,372,036,854,775,808 에서 9,223,372,036,854,775,807 까지 훨씬 더 넓은 범위의 값을 저장할 수 있습니다.

HelloJava.java 프로그램을 수정하여 이러한 차이점을 설명해 보겠습니다.

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

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

    public class HelloJava {
        public static void main(String[] args) {
            // Maximum value for int
            int maxInt = Integer.MAX_VALUE;
            System.out.println("Maximum value of int: " + maxInt);
    
            // Trying to store a value larger than maxInt in an int (will cause error if uncommented)
            // int tooBigInt = 2147483648; // This line would cause a compilation error
    
            // A value larger than maxInt, stored in a long
            long largeLong = 2147483648L; // Note the 'L' suffix
            System.out.println("A large value stored in long: " + largeLong);
    
            // Maximum value for long
            long maxLong = Long.MAX_VALUE;
            System.out.println("Maximum value of long: " + maxLong);
    
            // Demonstrating the size difference with literals
            System.out.println("Size of int in bits: " + Integer.SIZE);
            System.out.println("Size of long in bits: " + Long.SIZE);
        }
    }

    이 코드에서:

    • Integer.MAX_VALUE를 사용하여 int가 저장할 수 있는 최대값을 출력합니다.
    • 주석 처리된 줄을 표시합니다. 주석 처리를 해제하면 컴파일 오류가 발생합니다. 왜냐하면 값 2147483648int의 최대값보다 크기 때문입니다.
    • 동일한 큰 값을 long 리터럴임을 나타내는 L 접미사를 사용하여 long 변수 largeLong에 저장합니다.
    • Long.MAX_VALUE를 사용하여 long이 저장할 수 있는 최대값을 출력합니다.
    • Integer.SIZELong.SIZE를 사용하여 intlong의 크기를 비트 단위로 출력합니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 프로그램을 컴파일합니다.

    javac HelloJava.java

    컴파일 오류가 없는지 확인합니다.

  5. 프로그램을 실행합니다.

    java HelloJava

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

    Maximum value of int: 2147483647
    A large value stored in long: 2147483648
    Maximum value of long: 9223372036854775807
    Size of int in bits: 32
    Size of long in bits: 64

이 출력은 longint보다 훨씬 더 큰 값을 저장할 수 있으며, 각 크기를 비트 단위로 확인합니다. intlong 중에서 선택할 때는 변수가 저장해야 하는 값의 범위를 고려하십시오. 메모리를 절약하려면 작은 숫자에 int를 사용하고, 큰 숫자에 long을 사용하십시오.

요약

이 랩에서는 Java 에서 숫자가 Long인지 확인하는 방법을 배웠습니다. Long 래퍼 클래스와 기본 타입 long과의 관계를 살펴보았습니다. 특히, 객체가 Long 클래스의 인스턴스인지 확인하기 위해 instanceof 연산자를 사용하는 데 중점을 두었습니다. 실용적인 예제를 통해 instanceof를 적용하여 Long 객체와 Integer 객체를 구별하는 방법을 시연했습니다.