언어(Language)/Java

[Java] 객체 null 체크 - Objects.isNull() vs == 연산자

잇트루 2023. 5. 4. 20:57
반응형

객체의 널 체크

자바에서 객체의 null 여부를 체크하기 위해서는 두 가지 방법을 사용할 수 있다.

  1. java.utils.Objects에 구현되어 있는 isNull 메서드
  2. == 연산자를 사용

 

사용 방법

isNull()

import java.util.Objects;

public class Example {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "hello";

        System.out.println(Objects.isNull(str1));
        System.out.println(Objects.isNull(str2));
    }
}
// 출력
true
false

 

== 연산자

public class Example {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "hello";

        System.out.println(str1 == null);
        System.out.println(str2 == null);
    }
}
// 출력
true
false

위 두 코드와 같이 사용 방법은 매우 간단하다.

 

주로 다음 코드와 같이 해당 객체가 널 인지 아닌지에 따라 다르게 처리하기 위해 사용할 것이다.

if (Objects.istNull(object) {
    ...
} else {
    ...
}

if (object == null) {
    ...
} else {
    ...
}

 

 

Objects.isNull() vs ==

객체의 null 여부를 체크할 때, Objects.isNull() 메서드만 사용하는 사람들이 있을 것이고, == 연산자만 사용하는 사람도 있을 것이다. 또 어떤 사람들은 이 둘을 혼용하면서 사용하기도 할 것이다.

 

먼저 이 둘의 차이를 알기 위해 Objects.isNull() 메서드가 어떻게 구현되어 있는지 살펴보자.

public static boolean isNull(Object obj) {
    return obj == null;
}
  • 객체를 인자로 받아 == 연산자를 사용한다.
  • 즉, == 연산자와 같은 연산을 수행하여 성능 및 기능적인 차이가 없다.

 

Objects.isNull() 메서드의 JavaDoc를 살펴봐야 해당 메서드가 어떤 의도로 사용되는지 알 수 있다.

API Note : This method exists to be used as a java.util.function.Predicate, filter(Objects::isNull)

이 메서드는 java.util.function.Predicate로 사용하기 위해 존재한다고 적혀있다. 즉, Predicate 인터페이스로 받는 메서드에 사용하기 위한 메서드다.

Objects.isNull() 메서드의 적절한 사용 방법은 따로 존재한다는 말이기도 하다.

 

적절한 예시

public class Example {
    public static void main(String[] args) {
        String[] arr = {"Hello", null, "Objects", null, "isNull"};
        long count = Arrays.stream(arr)
                .filter(Objects::isNull)
                .count();
        System.out.println("Number of null values: " + count);
    }
}
// 출력
Number of null values: 2

Objects.isNull() 메서드의 반대 경우인 Objects.nonNull() 메서드도 똑같다.

 

 

결론

  • Objects.isNull() 메서드와 == 연산자는 완전히 똑같은 기능을 한다.
  • 하지만, Objects.isNull() 메서드가 등장한 이유와 사용 목적은 따로 있다.
  • Objects.isNull() 메서드 사용은 개인적인 취향의 영역일 수도 있다.
  • 하지만, 사용 목적에 따라 Objects.isNull() 메서드의 사용을 지양하는 것이 좋을 것 같다.
  • 개인적으로 가독성으로도, 사용 편의성으로도 == 연산자가 좋다고 생각한다.
반응형