Java 에서 Double 객체가 Null 인지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 Double 객체가 null 인지 확인하는 방법을 배우게 됩니다. 기본형 doubleDouble 래퍼 클래스의 차이점을 살펴보고, 잠재적인 NullPointerException 오류를 처리하는 방법을 알아보겠습니다.

이 랩에서는 동등 연산자를 사용하여 null 을 확인하고, null 값과 0 값을 구별하며, 보다 강력한 null 처리를 위해 Optional 클래스를 활용하는 방법을 안내합니다. 이러한 개념에 대한 이해를 굳건히 하기 위해 코드 예제를 구현하고 테스트할 것입니다.

Double 래퍼 Null 확인

이 단계에서는 Java 에서 Double 래퍼 객체를 처리하는 방법을 살펴보고, 특히 Double 변수가 null인지 확인하는 데 중점을 둡니다. double과 같은 기본형과 달리, Double과 같은 래퍼 클래스는 값의 부재를 나타내는 null 값을 가질 수 있습니다. 프로그램에서 NullPointerException 오류를 방지하려면 null 값을 올바르게 처리하는 것이 중요합니다.

Double 객체에서 null을 확인하는 것을 보여주는 간단한 Java 프로그램을 만들어 보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다. 열려 있지 않은 경우, 왼쪽의 파일 탐색기에서 ~/project 디렉토리 아래에서 찾을 수 있습니다.

  2. HelloJava.java의 기존 코드를 다음 코드로 바꿉니다.

    public class HelloJava {
        public static void main(String[] args) {
            Double price = null; // Double 변수를 선언하고 null 로 초기화합니다.
    
            if (price == null) {
                System.out.println("Price is not set (it is null).");
            } else {
                System.out.println("Price is set to: " + price);
            }
    
            Double quantity = 10.5; // 다른 Double 변수를 선언하고 값을 할당합니다.
    
            if (quantity == null) {
                System.out.println("Quantity is not set (it is null).");
            } else {
                System.out.println("Quantity is set to: " + quantity);
            }
        }
    }

    이 코드의 새로운 부분을 살펴보겠습니다.

    • Double price = null;: Double 유형의 price라는 변수를 선언하고 null 값을 할당합니다.
    • if (price == null): price 변수가 null과 같은지 확인하는 if 문입니다. == 연산자는 객체에 대한 참조가 null인지 비교하는 데 사용됩니다.
    • System.out.println("Price is not set (it is null).");: price가 실제로 null인 경우 이 줄이 실행됩니다.
    • Double quantity = 10.5;: quantity라는 다른 Double 변수를 선언하고 숫자 값을 할당합니다.
    • 두 번째 if 문은 quantitynull인지 확인합니다. 값을 할당했으므로 이 조건은 false 가 됩니다.
  3. HelloJava.java 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 이제 수정된 프로그램을 컴파일합니다. WebIDE 하단의 터미널을 열고 다음 명령을 실행합니다.

    javac HelloJava.java

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

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

    java HelloJava

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

    Price is not set (it is null).
    Quantity is set to: 10.5

    이 출력은 프로그램이 pricenull이고 quantity에 값이 있음을 올바르게 식별했음을 확인합니다.

null을 확인하는 방법을 이해하는 것은 Java 객체, 특히 래퍼 클래스를 사용할 때 기본입니다. 다음 단계에서는 null Double과 값이 0 인 Double의 차이점을 살펴보겠습니다.

Null 과 0 값 처리

이전 단계에서는 Double 래퍼 객체가 null인지 확인하는 방법을 배웠습니다. 이제 Doublenull인 경우와 Double이 0(0.0) 값을 갖는 경우의 차이점을 살펴보겠습니다. 이 구별은 null이 "값이 없음"을 의미하는 반면, 0.0은 특정 숫자 값이기 때문에 중요합니다.

제품에 적용된 할인을 추적하는 시나리오를 생각해 보십시오. null 할인은 할인 정보를 사용할 수 없음을 의미할 수 있으며, 0.0 할인은 명시적으로 할인이 적용되지 않았음을 의미합니다.

이 차이점을 보여주기 위해 HelloJava.java 프로그램을 수정해 보겠습니다.

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

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

    public class HelloJava {
        public static void main(String[] args) {
            Double discount = null; // 할인 정보를 사용할 수 없음
    
            if (discount == null) {
                System.out.println("Discount information is not available (it is null).");
            } else if (discount == 0.0) {
                System.out.println("There is no discount (value is 0.0).");
            } else {
                System.out.println("Discount applied: " + discount);
            }
    
            System.out.println("---"); // 명확성을 위한 구분 기호
    
            Double zeroDiscount = 0.0; // 명시적으로 할인이 없음
    
            if (zeroDiscount == null) {
                System.out.println("Discount information is not available (it is null).");
            } else if (zeroDiscount == 0.0) {
                System.out.println("There is no discount (value is 0.0).");
            } else {
                System.out.println("Discount applied: " + zeroDiscount);
            }
    
            System.out.println("---"); // 명확성을 위한 구분 기호
    
            Double appliedDiscount = 5.5; // 특정 할인 값
    
            if (appliedDiscount == null) {
                System.out.println("Discount information is not available (it is null).");
            } else if (appliedDiscount == 0.0) {
                System.out.println("There is no discount (value is 0.0).");
            } else {
                System.out.println("Discount applied: " + appliedDiscount);
            }
        }
    }

    이 업데이트된 코드에서:

    • discount ( null로 초기화됨), zeroDiscount ( 0.0으로 초기화됨) 및 appliedDiscount ( 5.5로 초기화됨) 의 세 가지 Double 변수를 소개합니다.
    • if-else if-else 구조를 사용하여 각 변수의 상태를 확인합니다.
      • 먼저 변수가 null인지 확인합니다.
      • null이 아닌 경우, 해당 값이 0.0인지 확인합니다.
      • 그렇지 않으면 특정 할인 값이 적용되었다고 가정합니다.
  3. HelloJava.java 파일을 저장합니다.

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

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

    java HelloJava

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

    Discount information is not available (it is null).
    ---
    There is no discount (value is 0.0).
    ---
    Discount applied: 5.5

    이 출력은 Java 가 null Double과 값이 0.0Double을 어떻게 구별하는지 명확하게 보여줍니다. 이러한 경우를 올바르게 처리하는 것은 강력한 Java 애플리케이션을 작성하는 데 필수적입니다.

다음 단계에서는 Optional 클래스를 사용하여 잠재적인 null 값을 처리하는 보다 현대적인 접근 방식을 살펴보고, 이를 통해 코드를 더 안전하고 읽기 쉽게 만들 수 있습니다.

Optional 클래스 사용 테스트

최신 Java(Java 8 이상) 에서는 Optional 클래스가 종종 존재할 수도 있고 존재하지 않을 수도 있는 값을 나타내는 데 사용됩니다. 이는 단순히 null 참조를 사용하는 것보다 잠재적인 null 값을 처리하는 더 명시적이고 안전한 방법을 제공합니다. Optional을 사용하면 NullPointerException 오류를 방지하고 코드를 더 읽기 쉽게 만들 수 있습니다.

Optional<Double> 클래스를 사용하여 할인 예제를 다시 작성해 보겠습니다.

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

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

    import java.util.Optional;
    
    public class HelloJava {
        public static void main(String[] args) {
            // null 일 수 있는 할인을 나타냅니다.
            Optional<Double> optionalDiscount = Optional.empty();
    
            if (optionalDiscount.isPresent()) {
                System.out.println("Discount is present: " + optionalDiscount.get());
            } else {
                System.out.println("Discount is not present (Optional is empty).");
            }
    
            System.out.println("---"); // 명확성을 위한 구분 기호
    
            // 값이 0.0 인 할인을 나타냅니다.
            Optional<Double> optionalZeroDiscount = Optional.of(0.0);
    
            if (optionalZeroDiscount.isPresent()) {
                System.out.println("Discount is present: " + optionalZeroDiscount.get());
            } else {
                System.out.println("Discount is not present (Optional is empty).");
            }
    
            System.out.println("---"); // 명확성을 위한 구분 기호
    
            // 특정 값을 가진 할인을 나타냅니다.
            Optional<Double> optionalAppliedDiscount = Optional.of(5.5);
    
            if (optionalAppliedDiscount.isPresent()) {
                System.out.println("Discount is present: " + optionalAppliedDiscount.get());
            } else {
                System.out.println("Discount is not present (Optional is empty).");
            }
    
            System.out.println("---"); // 명확성을 위한 구분 기호
    
            // Optional 을 처리하는 일반적인 방법: orElse 사용
            Double finalDiscount = optionalDiscount.orElse(0.0);
            System.out.println("Using orElse: Final discount is " + finalDiscount);
    
            Double finalZeroDiscount = optionalZeroDiscount.orElse(0.0);
            System.out.println("Using orElse: Final zero discount is " + finalZeroDiscount);
        }
    }

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

    • import java.util.Optional;: Optional 클래스를 가져옵니다.
    • Optional<Double> optionalDiscount = Optional.empty();: 할인 값이 없음을 나타내는 빈 Optional<Double>을 만듭니다.
    • Optional<Double> optionalZeroDiscount = Optional.of(0.0);: 값 0.0을 포함하는 Optional<Double>을 만듭니다. 값에 null이 확실히 없으면 Optional.of()를 사용합니다.
    • Optional<Double> optionalAppliedDiscount = Optional.of(5.5);: 값 5.5를 포함하는 Optional<Double>을 만듭니다.
    • optionalDiscount.isPresent(): 이 메서드는 Optional에 값이 있는지 확인합니다. null과 비교하는 대신 확인하는 것이 권장되는 방법입니다.
    • optionalDiscount.get(): 이 메서드는 Optional에서 값을 검색합니다. 주의: Optional이 비어 있으면 get()을 호출하면 NoSuchElementException이 발생합니다. get()을 호출하기 전에 항상 isPresent()를 확인하거나 orElse()와 같은 대체 메서드를 사용하십시오.
    • optionalDiscount.orElse(0.0): 이 메서드는 Optional에 값이 있으면 내부 값을 반환하고, 그렇지 않으면 제공된 기본값 (이 경우 0.0) 을 반환합니다. 이는 값을 가져오고 Optional이 비어 있는 경우를 처리하는 안전한 방법입니다.
  3. HelloJava.java 파일을 저장합니다.

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

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

    java HelloJava

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

    Discount is not present (Optional is empty).
    ---
    Discount is present: 0.0
    ---
    Discount is present: 5.5
    ---
    Using orElse: Final discount is 0.0
    Using orElse: Final zero discount is 0.0

    이 출력은 Optional이 값이 없을 수 있는 경우를 명시적으로 처리하는 데 어떻게 도움이 되는지 보여줍니다. Optional을 사용하면 NullPointerException의 위험을 줄여 더 깨끗하고 강력한 코드를 작성할 수 있습니다.

이제 Double 래퍼 객체에서 null을 확인하고, null과 0 값을 구별하며, 잠재적으로 누락된 값을 더 안전하게 처리하기 위해 Optional 클래스를 사용하는 방법을 배웠습니다. 이는 안정적인 Java 코드를 작성하는 데 중요한 개념입니다.

요약

이 랩에서는 Java 에서 Double 래퍼 객체가 null인지 확인하는 방법을 배웠습니다. 기본형 double과 달리 Doublenull 값을 가질 수 있다는 것을 확인했습니다. Double 변수에 값이 없는지 확인하고 잠재적인 NullPointerException 오류를 방지하기 위해 == null 비교를 사용하는 방법을 시연했습니다. 또한 Double 객체의 null 값과 0 값의 차이점과 두 경우를 적절하게 처리하는 방법을 살펴보았습니다. 마지막으로, 잠재적인 null 값을 보다 명시적이고 안전하게 처리하기 위한 현대적인 Java 접근 방식인 Optional 클래스를 소개했습니다.