[개발 일기] 2025.02.24 - == 연산자 vs Objects.isNull()

2025. 2. 24. 14:13·개발 일기

💡 개요

오늘은 자바에서 null 여부 반별에 사용하는 == 연산자와 Objects.isNull() 메서드에 대해 정리해 보자.

 

 

 

📕 == 연산자

== 연산자는 객체의 참조값을 비교한다.

 

 

만약 참조형 타입의 객체가 null이라는 것은 JVM의 힙 영역에 아무런 값을 참조하고 있지 않다는 의미이다.

 

 

다음은 == 연산자를 사용해 null 여부를 판별하는 코드이다.

 

 

String s = null;

if (s == null) {
    System.out.println("== 연산자");
}

 

[결과]
== 연산자

 

 

보다시피 정상적으로 null 여부를 판별한다.

 

 

 

📕 Objects.isNull()

다음은 Objects.isNull() 메서드를 사용한 null 여부 판별 코드이다.

 

 

String s = null;

if (Objects.isNull(s)) {
    System.out.println("isNull() 메서드");
}

 

[결과]
isNull() 메서드

 

 

Objects.isNull() 메서드도 정상적으로 null 여부를 판별한다.

 

 

그렇다면 Objects.isNull() 은 어떻게 동작할까?

 

 

실제로 Objects 메서드를 확인해 보면 내부적으로 == 연산자를 사용하고 있음을 알 수 있다.

 

 

 

 

그렇다면 단순히 == null 을 사용하는 것과 차이가 없다면, 굳이 메서드로 제공하는 이유는 무엇일까?

 

 

그것도 공식 API 문서의 설명을 보면 그 이유를 알 수 있다.

 

 

 

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

 

 

이 메서드는 Predicate, 즉 함수형 프로그래밍 목적으로 설계된 메서드라는 것을 볼 수 있다.

 

 

Objects.isNull() 메서드를 Predicate로 사용하면 다음과 같이 활용할 수 있다.

 

 

String[] arr = {"홍길동", "김철수", null, null};

long nullCnt = Arrays.stream(arr)
    .filter(Objects::isNull)
    .count();

System.out.println(nullCnt);

 

[결과]
2

 

 

 

Predicate

 

Predicate란 자바의 함수형 인터페이스 중 하나로, 입력값을 받아서 true 또는 false를 반환하는 함수를 의미한다.

 

 

// Predicate 정의: 문자열의 길이가 5보다 큰지 확인
Predicate<String> isLongerThan5 = str -> str.length() > 5;

System.out.println(isLongerThan5.test("Hello"));
System.out.println(isLongerThan5.test("Predicate"));

 

[결과]
false
true

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.02.26 - Dangling quantifier '+’ 에러  (0) 2025.02.26
[개발 일기] 2025.02.25 - 전략 패턴  (0) 2025.02.25
[개발 일기] 2025.02.23 - @Builder를 사용하면 생성자가 private이라도 외부에서 접근 가능한 이유?  (0) 2025.02.23
[개발 일기] 2025.02.22 - JPA Entity 기본생성자  (0) 2025.02.22
[개발 일기] 2025.02.21 - CDN(콘텐츠 전송 네트워크)  (0) 2025.02.21
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.02.26 - Dangling quantifier '+’ 에러
  • [개발 일기] 2025.02.25 - 전략 패턴
  • [개발 일기] 2025.02.23 - @Builder를 사용하면 생성자가 private이라도 외부에서 접근 가능한 이유?
  • [개발 일기] 2025.02.22 - JPA Entity 기본생성자
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.02.24 - == 연산자 vs Objects.isNull()
상단으로

티스토리툴바