언어(Language)/Java
[Java] 객체 null 체크 - Objects.isNull() vs == 연산자
잇트루
2023. 5. 4. 20:57
반응형
객체의 널 체크
자바에서 객체의 null 여부를 체크하기 위해서는 두 가지 방법을 사용할 수 있다.
- java.utils.Objects에 구현되어 있는 isNull 메서드
- == 연산자를 사용
사용 방법
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() 메서드의 사용을 지양하는 것이 좋을 것 같다.
- 개인적으로 가독성으로도, 사용 편의성으로도 == 연산자가 좋다고 생각한다.
반응형