Java 에서 Boolean 변수가 True 인지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 boolean 변수가 true인지 확인하는 방법을 배우게 됩니다. 동등 연산자를 사용하는 기본적인 방법, Boolean 래퍼 클래스 처리, 잠재적인 null 값 관리 방법에 대해 살펴보겠습니다.

실습 예제를 통해 boolean 값을 기반으로 조건 로직을 작성하는 실질적인 경험을 쌓아 Java 코드가 견고하고 다양한 시나리오를 효과적으로 처리할 수 있도록 할 것입니다.

동등 연산자를 사용하여 True 확인

이 단계에서는 동등 연산자를 사용하여 Java 에서 boolean 변수가 true인지 확인하는 방법을 살펴보겠습니다. 간단해 보일 수 있지만, 깔끔하고 정확한 코드를 작성하려면 뉘앙스를 이해하는 것이 중요합니다.

Java 에서 boolean 데이터 타입은 true 또는 false의 두 가지 값 중 하나를 가질 수 있습니다. boolean 변수가 있으면 프로그램에서 결정을 내리기 위해 해당 값을 확인해야 하는 경우가 많습니다.

boolean 변수가 true인지 확인하는 가장 일반적인 방법은 동등 연산자 ==를 사용하는 것입니다.

이를 시연하기 위해 간단한 Java 프로그램을 만들어 보겠습니다.

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

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

    public class HelloJava {
        public static void main(String[] args) {
            boolean isJavaFun = true;
    
            if (isJavaFun == true) {
                System.out.println("Java is fun!");
            } else {
                System.out.println("Java is not fun.");
            }
        }
    }

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

    • boolean isJavaFun = true;: 이 줄은 isJavaFun이라는 boolean 변수를 선언하고 값을 true로 초기화합니다.
    • if (isJavaFun == true): 이것은 if 문입니다. 괄호 안의 조건이 true인지 확인합니다. 조건 isJavaFun == true는 동등 연산자 ==를 사용하여 isJavaFun 변수의 값을 boolean 리터럴 true와 비교합니다.
    • System.out.println("Java is fun!");: 이 줄은 조건 isJavaFun == truetrue인 경우 실행됩니다.
    • else: 이 키워드는 if 조건이 false인 경우 실행될 코드 블록을 소개합니다.
    • System.out.println("Java is not fun.");: 이 줄은 조건 isJavaFun == truefalse인 경우 실행됩니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 터미널에서 javac 명령을 사용하여 프로그램을 컴파일합니다.

    javac HelloJava.java

    오류가 없으면 ~/project 디렉토리에 HelloJava.class 파일이 생성됩니다.

  5. java 명령을 사용하여 컴파일된 프로그램을 실행합니다.

    java HelloJava

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

    Java is fun!

    이는 if 조건 isJavaFun == truetrue로 평가되었고 해당 메시지가 인쇄되었음을 확인합니다.

== true를 사용하는 것은 완벽하게 유효하고 이해하기 쉽지만, Java 에서는 true에 대한 확인을 단순화할 수 있습니다. if 문은 이미 괄호 안의 표현식을 boolean 으로 평가하므로 boolean 변수 자체를 조건으로 직접 사용할 수 있습니다.

이 단순화된 접근 방식을 사용하도록 코드를 수정해 보겠습니다.

  1. 편집기에서 HelloJava.java를 다시 엽니다.

  2. if 문을 다음과 같이 변경합니다.

    if (isJavaFun) {
        System.out.println("Java is fun!");
    } else {
        System.out.println("Java is not fun.");
    }

    == true를 제거했음을 알 수 있습니다. if (isJavaFun) 문은 if (isJavaFun == true)와 동일합니다.

  3. 파일을 저장합니다.

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

    javac HelloJava.java
  5. 프로그램을 다시 실행합니다.

    java HelloJava

    동일한 출력을 얻을 수 있습니다.

    Java is fun!

    이는 if 조건에서 boolean 변수를 직접 사용하는 것이 true인지 확인하는 더 간결하고 관용적인 방법임을 보여줍니다.

요약하면, 동등 연산자 == true를 사용하여 boolean 이 true 인지 확인할 수 있지만, 더 일반적이고 깔끔한 방법은 if 문에서 boolean 변수 자체를 조건으로 사용하는 것입니다.

Boolean 래퍼 클래스로 테스트

이전 단계에서는 기본형 boolean 타입을 사용했습니다. Java 에는 이에 해당하는 Boolean이라는 래퍼 클래스도 있습니다. 래퍼 클래스는 기본 데이터 타입을 객체로 사용하는 방법을 제공합니다. 이는 컬렉션으로 작업하거나 null일 수 있는 boolean 값을 나타내야 할 때 특히 유용합니다.

Boolean 클래스에는 boolean 값에 대한 두 개의 미리 정의된 객체, 즉 Boolean.TRUEBoolean.FALSE가 있습니다. 이는 각각 boolean 값 truefalse를 나타내는 상수 객체입니다.

Boolean 객체로 작업할 때도 동등 연산자 ==를 사용하여 비교할 수 있습니다. 그러나 ==가 객체와 함께 작동하는 방식을 이해하는 것이 중요합니다. 객체의 경우 ==는 두 변수가 동일한 값을 갖는지 여부뿐만 아니라 메모리에서 정확히 동일한 객체를 참조하는지 확인합니다.

Boolean 래퍼 클래스를 사용하도록 프로그램을 수정하고 동등 연산자의 동작 방식을 살펴보겠습니다.

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

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

    public class HelloJava {
        public static void main(String[] args) {
            Boolean isJavaFunObject = Boolean.TRUE;
    
            if (isJavaFunObject == Boolean.TRUE) {
                System.out.println("Java is fun (using Boolean.TRUE)!");
            } else {
                System.out.println("Java is not fun (using Boolean.TRUE).");
            }
    
            Boolean anotherBooleanObject = true; // Autoboxing
    
            if (anotherBooleanObject == Boolean.TRUE) {
                 System.out.println("Another boolean object is true!");
            } else {
                 System.out.println("Another boolean object is not true.");
            }
        }
    }

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

    • Boolean isJavaFunObject = Boolean.TRUE;: Boolean 타입의 변수를 선언하고 상수 Boolean.TRUE를 할당합니다.
    • if (isJavaFunObject == Boolean.TRUE): 동등 연산자 ==를 사용하여 Boolean 객체를 Boolean.TRUE 상수와 비교합니다. isJavaFunObjectBoolean.TRUE가 할당되었으므로 동일한 객체를 참조하므로 이 조건은 true가 됩니다.
    • Boolean anotherBooleanObject = true;: 이 줄은 "오토박싱 (autoboxing)"을 보여줍니다. Java 는 기본형 booleantrueBoolean 객체로 자동 변환합니다.
    • if (anotherBooleanObject == Boolean.TRUE): 다시 ==를 사용하여 anotherBooleanObjectBoolean.TRUE와 비교합니다. 오토박싱이 작동하는 방식과 Java 의 Boolean 값 캐싱으로 인해 truefalse 값의 경우 오토박싱된 Boolean 객체는 종종 Boolean.TRUEBoolean.FALSE와 동일한 캐시된 인스턴스를 참조합니다. 따라서 이 조건도 true가 될 가능성이 높습니다.
  3. 파일을 저장합니다.

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

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

    java HelloJava

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

    Java is fun (using Boolean.TRUE)!
    Another boolean object is true!

    이는 Boolean.TRUE와 함께 ==를 사용하는 것이 이러한 경우에 예상대로 작동함을 확인합니다. 변수가 동일한 기본 Boolean.TRUE 객체를 참조할 가능성이 높기 때문입니다.

그러나 Boolean 객체를 비교하기 위해 ==에 의존하는 것은 특히 Boolean 객체가 다른 방식으로 생성되거나 다른 소스에서 오는 경우 더 복잡한 시나리오에서 위험할 수 있습니다. 값의 동일성을 위해 Boolean 객체를 비교하는 더 안전하고 권장되는 방법은 .equals() 메서드를 사용하는 것입니다.

.equals()를 사용하도록 코드를 수정해 보겠습니다.

  1. 편집기에서 HelloJava.java를 엽니다.

  2. .equals()를 사용하도록 if 문을 변경합니다.

    public class HelloJava {
        public static void main(String[] args) {
            Boolean isJavaFunObject = Boolean.TRUE;
    
            if (isJavaFunObject.equals(Boolean.TRUE)) {
                System.out.println("Java is fun (using equals)!");
            } else {
                System.out.println("Java is not fun (using equals).");
            }
    
            Boolean anotherBooleanObject = true; // Autoboxing
    
            if (anotherBooleanObject.equals(Boolean.TRUE)) {
                 System.out.println("Another boolean object is true (using equals)!");
            } else {
                 System.out.println("Another boolean object is not true (using equals).");
            }
        }
    }

    == Boolean.TRUE.equals(Boolean.TRUE)로 바꿨습니다. .equals() 메서드는 객체의 을 비교하며 메모리 위치는 비교하지 않습니다.

  3. 파일을 저장합니다.

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

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

    java HelloJava

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

    Java is fun (using equals)!
    Another boolean object is true (using equals)!

    .equals()를 사용하는 것은 값의 동일성을 위해 Boolean 객체를 비교하는 표준적이고 가장 안전한 방법입니다.

요약하면, ==가 캐싱으로 인해 Boolean 객체를 Boolean.TRUE와 비교하는 데 작동할 수 있지만, .equals() 메서드는 Boolean 객체가 값 true를 나타내는지 확인하는 데 선호되고 더 신뢰할 수 있는 방법입니다.

Null Boolean 처리

이전 단계에서 Boolean 래퍼 클래스에 대해 배웠습니다. 기본형 booleanBoolean 래퍼 클래스의 주요 차이점 중 하나는 Boolean 변수는 null 값을 가질 수 있는 반면, 기본형 boolean은 가질 수 없다는 것입니다. null 값을 처리하는 것은 NullPointerException 오류를 방지하기 위해 Java 에서 매우 중요합니다.

NullPointerException은 현재 유효한 객체인 것처럼 null을 가리키는 변수를 사용하려고 할 때 발생합니다. 예를 들어, null 객체에서 메서드를 호출하면 NullPointerException이 발생합니다.

Boolean 객체가 true인지 확인할 때 객체가 null일 수 있는 경우 주의해야 합니다.

지금까지 배운 메서드를 사용하여 null Boolean을 확인하려고 하면 어떻게 되는지 살펴보겠습니다.

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

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

    public class HelloJava {
        public static void main(String[] args) {
            Boolean nullableBoolean = null;
    
            // Attempting to use == with null
            if (nullableBoolean == true) {
                System.out.println("This won't be printed.");
            } else {
                System.out.println("Using == with null Boolean.");
            }
    
            // Attempting to use .equals() with null
            // This will cause a NullPointerException!
            // if (nullableBoolean.equals(Boolean.TRUE)) {
            //     System.out.println("This will not be reached.");
            // } else {
            //     System.out.println("This will not be reached either.");
            // }
        }
    }

    이 코드에서:

    • Boolean nullableBoolean = null;: Boolean 변수를 선언하고 명시적으로 null로 설정합니다.
    • if (nullableBoolean == true): 동등 연산자 ==를 사용하여 null Boolean을 기본형 true와 비교합니다. Boolean 객체 (심지어 null인 경우에도) 를 기본형 boolean과 비교할 때 Java 는 "언박싱 (unboxing)"을 수행합니다. Boolean 객체를 기본형 boolean으로 변환하려고 시도합니다. Boolean 객체가 null인 경우 이 언박싱 프로세스는 NullPointerException을 발생시킵니다.
    • 주석 처리된 .equals() 확인도 NullPointerException을 발생시킵니다. null 객체 (nullableBoolean) 에서 .equals() 메서드를 호출하려고 하기 때문입니다.
  3. 파일을 저장합니다.

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

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

    java HelloJava

    터미널에 NullPointerException을 나타내는 오류 메시지가 표시됩니다.

    Exception in thread "main" java.lang.NullPointerException
        at HelloJava.main(HelloJava.java:6)

    이는 잠재적으로 nullBoolean==를 사용하여 기본형 boolean과 직접 비교하거나 .equals()를 호출하면 NullPointerException이 발생할 수 있음을 보여줍니다.

잠재적으로 nullBoolean 객체를 안전하게 처리하려면 언박싱을 시도하거나 메서드를 호출하기 전에 항상 객체가 null인지 확인해야 합니다.

Boolean 객체가 true인지 안전하게 확인하는 방법은 다음과 같습니다.

  1. 편집기에서 HelloJava.java를 엽니다.

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

    public class HelloJava {
        public static void main(String[] args) {
            Boolean nullableBoolean = null;
            Boolean trueBoolean = Boolean.TRUE;
            Boolean falseBoolean = Boolean.FALSE;
    
            // Safely check if nullableBoolean is true
            if (nullableBoolean != null && nullableBoolean == true) {
                System.out.println("nullableBoolean is true (safe check).");
            } else {
                System.out.println("nullableBoolean is not true or is null (safe check).");
            }
    
            // Safely check if trueBoolean is true
            if (trueBoolean != null && trueBoolean == true) {
                System.out.println("trueBoolean is true (safe check).");
            } else {
                System.out.println("trueBoolean is not true or is null (safe check).");
            }
    
            // Safely check if falseBoolean is true
            if (falseBoolean != null && falseBoolean == true) {
                System.out.println("falseBoolean is true (safe check).");
            } else {
                System.out.println("falseBoolean is not true or is null (safe check).");
            }
    
            // Alternative safe check using equals
            if (Boolean.TRUE.equals(nullableBoolean)) {
                 System.out.println("nullableBoolean is true (safe equals check).");
            } else {
                 System.out.println("nullableBoolean is not true or is null (safe equals check).");
            }
    
             if (Boolean.TRUE.equals(trueBoolean)) {
                 System.out.println("trueBoolean is true (safe equals check).");
             } else {
                 System.out.println("trueBoolean is not true or is null (safe equals check).");
             }
        }
    }

    이 업데이트된 코드에서:

    • if (nullableBoolean != null && nullableBoolean == true): 먼저 nullableBooleannull이 아닌지 nullableBoolean != null을 사용하여 확인합니다. && 연산자는 조건의 두 번째 부분 (nullableBoolean == true) 이 첫 번째 부분 (nullableBoolean != null) 이 true인 경우에만 평가됨을 의미합니다. 이렇게 하면 NullPointerException을 방지할 수 있습니다. nullableBooleannull인 경우 첫 번째 부분은 false이고 전체 조건은 두 번째 부분을 평가하지 않고 false입니다.
    • if (Boolean.TRUE.equals(nullableBoolean)): 이는 null일 수 있는 경우에도 Boolean 객체가 true인지 안전하게 확인하는 또 다른 방법입니다. 알려진 null 이 아닌 객체 Boolean.TRUE에서 .equals()를 호출하고 잠재적으로 null 객체 nullableBoolean을 인수로 전달하면 NullPointerException을 방지할 수 있습니다. .equals() 메서드는 null 인수를 적절하게 처리하도록 설계되었습니다. Boolean.TRUE.equals(null)은 단순히 false를 반환합니다.
  3. 파일을 저장합니다.

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

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

    java HelloJava

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

    nullableBoolean is not true or is null (safe check).
    trueBoolean is true (safe check).
    falseBoolean is not true or is null (safe check).
    nullableBoolean is not true or is null (safe equals check).
    trueBoolean is true (safe equals check).

    이는 != null 확인과 == true를 결합하고 Boolean.TRUE.equals() 메서드를 사용하여 null일 수 있는 경우에도 Boolean 객체의 값을 안전하게 확인하는 방법을 보여줍니다.

런타임 오류를 방지하려면 Boolean 객체로 작업할 때 항상 null 가능성을 고려하십시오.

요약

이 Lab 에서는 Java 에서 boolean 변수가 true인지 확인하는 방법을 배웠습니다. 먼저 동등 연산자 ==를 사용하여 boolean 변수를 boolean 리터럴 true와 직접 비교하는 것으로 시작했습니다. 이는 기본형 boolean 의 값을 확인하는 가장 일반적이고 간단한 방법입니다.

또한 null일 수 있는 Boolean 래퍼 객체를 처리하는 방법을 살펴보았습니다. Boolean 객체를 ==를 사용하여 true와 직접 비교하는 것은 객체 식별성으로 인해 예상대로 작동하지 않을 수 있다는 것을 배웠습니다. 대신, 비교하기 전에 equals() 메서드를 사용하거나 Boolean 객체를 기본형 boolean 값으로 언박싱해야 합니다. 마지막으로, 값을 액세스하기 전에 null을 확인하여 nullable Boolean 객체로 작업할 때 잠재적인 NullPointerException을 처리하는 것의 중요성을 다루었습니다.