본문 바로가기

Java

[Java] 객체 null 체크 Objects.isNull(), obj == null

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);
    }
}

위와 같이 간결해지는 것을 볼 수 있습니다.

 

 

 

정리

  1. 성능적인 차이점은 없다.
  2. 성능에 차이가 없다면 일반적인 경우 가독성이 좋은 것으로 하는 것이 좋다
    (저는 Objects.isNull()이 눈에 익숙하지 않아 == null이 좋아 보입니다.)
  3. streamAPI를 사용할 때는 사용하는 것이 가독성이 좋아 보인다
728x90

'Java' 카테고리의 다른 글