반응형
객체의 널 체크
자바에서 객체의 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() 메서드의 사용을 지양하는 것이 좋을 것 같다.
- 개인적으로 가독성으로도, 사용 편의성으로도 == 연산자가 좋다고 생각한다.
반응형
'언어(Language) > Java' 카테고리의 다른 글
[Java] 자바 JSON 라이브러리 Gson 사용법 (0) | 2023.05.09 |
---|---|
[Java] 자바 JSON 라이브러리 Jackson - ObjectMapper 사용법 (0) | 2023.05.09 |
[Java] 자바 큐(Queue) 인터페이스 정리 (0) | 2023.02.22 |
[Java] 명령형 프로그래밍과 선언형 프로그래밍의 차이 (0) | 2023.01.04 |
[Java] JDBC란 무엇인가? - Java Database Connectivity (0) | 2022.11.24 |