소개
이 랩에서는 Java 에서 Boolean 래퍼 객체가 null인지 안전하게 확인하는 방법을 배우게 됩니다. 기본형 boolean 타입과 달리, Boolean 클래스는 null 값을 가질 수 있으며, 이를 제대로 처리하지 않으면 NullPointerException이 발생할 수 있습니다.
직접적인 null 검사, null 과 true/false 검사 결합, 그리고 더 강력한 null 처리를 위한 Optional 클래스 활용 등, null Boolean 객체를 처리하는 다양한 기술을 살펴볼 것입니다. 이 랩을 마치면 Java 에서 Boolean 래퍼 객체를 사용할 때 흔히 발생하는 문제점을 피할 수 있게 될 것입니다.
Boolean 래퍼 Null 여부 테스트
이 단계에서는 Java 에서 Boolean 래퍼 객체를 처리하는 방법을 살펴보고, 특히 Boolean 객체가 null인지 확인하는 데 중점을 둡니다. true 또는 false만 가질 수 있는 기본형 boolean 타입과 달리, Boolean 래퍼 클래스는 null 값도 가질 수 있습니다. 주의해서 처리하지 않으면 이는 NullPointerException의 흔한 원인이 됩니다.
이를 시연하기 위해 간단한 Java 프로그램을 만들어 보겠습니다.
WebIDE 의 왼쪽 파일 탐색기에서
~/project디렉토리를 엽니다.~/project디렉토리 내의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 "New File"을 선택합니다.새 파일의 이름을
BooleanCheck.java로 지정하고 Enter 키를 누릅니다.Code Editor 에서
BooleanCheck.java파일을 엽니다.다음 Java 코드를 복사하여 편집기에 붙여넣습니다.
public class BooleanCheck { public static void main(String[] args) { Boolean myBoolean = null; // Attempting to directly use a null Boolean in a conditional // will cause a NullPointerException // if (myBoolean) { // System.out.println("This will not be printed if myBoolean is null."); // } // Correct way to check if a Boolean wrapper is null if (myBoolean == null) { System.out.println("myBoolean is null."); } else { System.out.println("myBoolean is not null."); } // Another way to check the boolean value safely if (Boolean.TRUE.equals(myBoolean)) { System.out.println("myBoolean is true."); } else if (Boolean.FALSE.equals(myBoolean)) { System.out.println("myBoolean is false."); } else { System.out.println("myBoolean is null (checked using equals)."); } } }Ctrl + S(Mac 에서는Cmd + S) 를 눌러 파일을 저장합니다.이제 Java 프로그램을 컴파일해 보겠습니다. WebIDE 하단의 터미널을 엽니다.
~/project디렉토리에 있는지 확인합니다. 그렇지 않은 경우,cd ~/project를 입력하고 Enter 키를 누릅니다.javac명령을 사용하여 코드를 컴파일합니다.javac BooleanCheck.java오류가 없으면 명령이 출력 없이 완료됩니다. 이는
~/project디렉토리에BooleanCheck.class파일이 생성되었음을 의미합니다.java명령을 사용하여 컴파일된 Java 프로그램을 실행합니다.java BooleanCheck터미널에서 다음 출력을 볼 수 있습니다.
myBoolean is null. myBoolean is null (checked using equals).
이 출력은 == null 검사 및 Boolean.TRUE.equals() / Boolean.FALSE.equals() 패턴을 사용하여 코드가 Boolean 객체를 null로 올바르게 식별했음을 확인합니다. 주석 처리된 코드는 null Boolean을 if 조건에서 직접 사용하려고 시도할 경우 발생할 수 있는 상황을 보여주며, 이는 NullPointerException을 발생시킵니다.
null Boolean 객체를 안전하게 처리하는 방법을 이해하는 것은 Java 프로그래밍에서 흔한 오류를 피하는 데 매우 중요합니다.
Null 및 True/False 확인 결합
이전 단계에서 Boolean 객체가 null인지 확인하는 방법을 살펴보았습니다. 종종 Boolean이 true, false 또는 null인지 확인해야 합니다. 이러한 검사를 효율적이고 안전하게 결합하는 것이 중요합니다.
세 가지 가능성을 모두 처리하는 방법을 보여주기 위해 BooleanCheck.java 프로그램을 수정해 보겠습니다.
Code Editor 에서
BooleanCheck.java파일이 아직 열려 있지 않은 경우 엽니다.~/project디렉토리에 있어야 합니다.BooleanCheck.java의 기존 코드를 다음 코드로 바꿉니다. 이 버전에는null,true, 및falseBoolean값에 대한 예제가 포함되어 있습니다.public class BooleanCheck { public static void main(String[] args) { Boolean booleanValue1 = null; Boolean booleanValue2 = true; Boolean booleanValue3 = false; System.out.println("Checking booleanValue1 (null):"); checkBoolean(booleanValue1); System.out.println("\nChecking booleanValue2 (true):"); checkBoolean(booleanValue2); System.out.println("\nChecking booleanValue3 (false):"); checkBoolean(booleanValue3); } // A helper method to demonstrate the checks public static void checkBoolean(Boolean value) { if (value == null) { System.out.println("Value is null."); } else if (value) { // This is safe because we already checked for null System.out.println("Value is true."); } else { // If not null and not true, it must be false System.out.println("Value is false."); } // Another common pattern using equals for safety System.out.print("Using equals: "); if (Boolean.TRUE.equals(value)) { System.out.println("Value is true."); } else if (Boolean.FALSE.equals(value)) { System.out.println("Value is false."); } else { System.out.println("Value is null."); } } }이 업데이트된 코드에서:
Boolean객체를 입력으로 받는 도우미 메서드checkBoolean을 정의합니다.checkBoolean내부에서 먼저value == null을 사용하여value가null인지 확인합니다.null이 아닌 경우,value를 사용하여 부울 값이true인지 안전하게 확인합니다. Java 는 래퍼가null이 아닌 경우에만Boolean래퍼를 기본형boolean으로 자동 언박싱하기 때문에 이 방법이 작동합니다.null이 아니고true도 아닌 경우,false여야 하며, 이는else블록에서 처리됩니다.- 또한
Boolean.TRUE.equals(value)및Boolean.FALSE.equals(value)패턴을 다시 포함합니다. 이는 특히equals가 호출되는 객체가null인 경우 잠재적인NullPointerException을 방지하려는 경우에 유용한, 값을 확인하는 또 다른 안전한 방법입니다.
파일을 저장합니다 (
Ctrl + S또는Cmd + S).터미널에서 수정된 프로그램을 컴파일합니다.
javac BooleanCheck.java컴파일된 프로그램을 실행합니다.
java BooleanCheck다음 출력을 볼 수 있으며, 코드가 각 경우를 처리하는 방식을 보여줍니다.
Checking booleanValue1 (null): Value is null. Using equals: Value is null. Checking booleanValue2 (true): Value is true. Using equals: Value is true. Checking booleanValue3 (false): Value is false. Using equals: Value is false.
이 단계에서는 null, true, 및 false 값을 고려하여 Boolean 래퍼 객체의 상태를 확인하는 강력한 방법을 보여줍니다. 이는 안전하고 신뢰할 수 있는 Java 코드를 작성하기 위한 기본적인 기술입니다.
Optional 클래스 활용
최신 Java (Java 8 이상) 에서는 Optional 클래스가 종종 값이 존재할 수도 있고 존재하지 않을 수도 있는 값을 나타내는 데 사용됩니다. 이렇게 하면 값이 누락될 수 있는 경우를 명시적으로 만들어 코드에서 NullPointerException의 수를 줄이는 데 도움이 될 수 있습니다. Optional<Boolean>이 항상 가장 일반적인 사용 사례는 아니지만, Optional을 Boolean과 같은 래퍼 타입에 적용하는 방법을 이해하는 좋은 방법입니다.
이 단계에서는 Optional<Boolean>을 사용하여 누락된 부울 값의 가능성을 처리하도록 프로그램을 수정합니다.
Code Editor 에서
BooleanCheck.java파일을 엽니다.~/project디렉토리에 있어야 합니다.Optional<Boolean>을 사용하는 다음 코드로 기존 코드를 바꿉니다.import java.util.Optional; public class BooleanCheck { public static void main(String[] args) { Optional<Boolean> optionalBoolean1 = Optional.empty(); // Represents no value Optional<Boolean> optionalBoolean2 = Optional.of(true); // Represents the value true Optional<Boolean> optionalBoolean3 = Optional.of(false); // Represents the value false System.out.println("Checking optionalBoolean1 (empty):"); checkOptionalBoolean(optionalBoolean1); System.out.println("\nChecking optionalBoolean2 (true):"); checkOptionalBoolean(optionalBoolean2); System.out.println("\nChecking optionalBoolean3 (false):"); checkOptionalBoolean(optionalBoolean3); } // A helper method to demonstrate checking Optional<Boolean> public static void checkOptionalBoolean(Optional<Boolean> optionalValue) { if (optionalValue.isPresent()) { // Get the boolean value if present Boolean value = optionalValue.get(); if (value) { System.out.println("Value is present and true."); } else { System.out.println("Value is present and false."); } } else { System.out.println("Value is not present (empty Optional)."); } // Another way using orElse System.out.print("Using orElse(false): "); boolean result = optionalValue.orElse(false); System.out.println("Result: " + result); // Using ifPresent System.out.print("Using ifPresent: "); optionalValue.ifPresent(val -> System.out.println("Value is present: " + val)); if (!optionalValue.isPresent()) { System.out.println("Value is not present."); } } }이 버전에서:
java.util.Optional클래스를 가져옵니다.- 값이 없는 경우
Optional.empty()를 사용하고 값이 있는 경우Optional.of()를 사용하여Optional<Boolean>객체를 생성합니다. checkOptionalBoolean메서드는 이제Optional<Boolean>을 받습니다.optionalValue.isPresent()를 사용하여 값이 있는지 확인합니다.- 값이 있는 경우
optionalValue.get()을 사용하여 값을 검색합니다. 참고:isPresent()를 확인한 후에만get()을 호출하십시오. 그렇지 않으면NoSuchElementException이 발생합니다. - 또한
Optional이 비어 있는 경우 기본값 (이 경우 false) 을 제공하는orElse(false)를 시연합니다. ifPresent()를 사용하면 값이 있는 경우에만 작업을 수행할 수 있습니다.
파일을 저장합니다 (
Ctrl + S또는Cmd + S).터미널에서 수정된 프로그램을 컴파일합니다.
javac BooleanCheck.java컴파일된 프로그램을 실행합니다.
java BooleanCheck다음 출력을 볼 수 있습니다.
Checking optionalBoolean1 (empty): Value is not present (empty Optional). Using orElse(false): Result: false Using ifPresent: Value is not present. Checking optionalBoolean2 (true): Value is present and true. Using orElse(false): Result: true Using ifPresent: Value is present: true Checking optionalBoolean3 (false): Value is present and false. Using orElse(false): Result: false Using ifPresent: Value is present: false
이 출력은 Optional<Boolean>을 사용하여 부울 값의 존재 또는 부재를 명시적으로 처리하는 방법을 보여줍니다. 이는 단순히 nullable Boolean을 사용하는 것보다 잠재적으로 누락된 데이터를 처리하는 더 강력한 방법을 제공합니다.
요약
이 Lab 에서 우리는 Java 에서 Boolean 래퍼 객체가 null인지 확인하는 방법을 배웠습니다. 기본형 boolean 타입과 Boolean 래퍼 클래스의 차이점을 살펴보고, null Boolean 객체를 다룰 때 NullPointerException이 발생할 수 있음을 강조했습니다. 우리는 등가 연산자 (== null) 를 사용하여 null을 확인하는 올바른 방법을 시연했으며, Boolean.TRUE 및 Boolean.FALSE의 equals() 메서드를 사용하여 부울 값을 안전하게 확인하는 방법도 보여주었습니다. 이러한 기술은 nullable Boolean 객체로 작업할 때 런타임 오류를 방지하는 데 매우 중요합니다.



