728x90
스프링 강의를 보던 중 Objects.isNull()을 사용하여 null을 체크하는 것을 보고 뭔지 싶어서 정리를 했습니다.
Objects.isNull()이란?
해당 객체의 값이 null인지 확인하고 null이면 true를 null이 아니면 false를 반환합니다.
public class Main {
public static void main(String[] args) throws IOException {
Integer n1 = null;
Integer n2 = 10;
System.out.println(Objects.isNull(n1));
System.out.println(Objects.isNull(n2));
}
}
obj == null 과 차이점은?
/**
* Returns {@code true} if the provided reference is {@code null} otherwise
* returns {@code false}.
*
* @apiNote This method exists to be used as a
* {@link java.util.function.Predicate}, {@code filter(Objects::isNull)}
*
* @param obj a reference to be checked against {@code null}
* @return {@code true} if the provided reference is {@code null} otherwise
* {@code false}
*
* @see java.util.function.Predicate
* @since 1.8
*/
public static boolean isNull(Object obj) {
return obj == null;
}
사실 구현된 메소드를 확인해보면 결국 obj == null과 동일하다는 것을 알 수 있었습니다.
위의 주석 내용을 살펴보니 Predicate와 같은 함수형 인터페이스에서 쉽게 사용할 수 있도록 설계되었다는 주석을 확인할 수 있으며 fliter(Objects::isNull)와 같이 스트림 API에서 함수 참조로 사용할 수 있어 코드가 간결해진다는 장점으로 사용합니다.
또한 nonNull() 메소드 또한 위의 내용과 동일했습니다.
사용 예시
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
List<String> list = new ArrayList<>();
list.add("hi");
list.add(null);
list.add("hello");
list.add("shs00925");
System.out.println(list);
List<String> newList = list.stream()
.filter(Objects::nonNull)
.toList();
System.out.println(newList);
}
}
위와 같이 간결해지는 것을 볼 수 있습니다.
정리
- 성능적인 차이점은 없다.
- 성능에 차이가 없다면 일반적인 경우 가독성이 좋은 것으로 하는 것이 좋다
(저는 Objects.isNull()이 눈에 익숙하지 않아 == null이 좋아 보입니다.) - streamAPI를 사용할 때는 사용하는 것이 가독성이 좋아 보인다
728x90
'Java' 카테고리의 다른 글
[Java] 실행 시간 측정 (2) | 2025.02.01 |
---|---|
[Java] SinglyLinkedList 구현 (1) | 2025.01.27 |
[Java] 동등성 (equals(), hashCode()) (0) | 2025.01.05 |
[Java] String, StringBuffer, StringBuilder 차이점 (1) | 2025.01.03 |
[Java] 인스턴스 내부 클래스 (0) | 2024.12.05 |