💡 개요
오늘은 자바에서 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 |