앞서서 우리는 Predicate<T> 함수적 인터페이스가 제공하는 디폴트 메서드 and( ), or( ), negate( )를 살펴보았습니다.
그런데 Predicate<T> 함수적 인터페이스는 디폴트 메서드 외에 정적 메서드 isEqual( ) 메서드를 추가로 제공합니다. 다소 헷갈릴 수 있는 개념이자 사용법을 갖고 있는데, 간단하게 사용법을 확인해 보도록 하겠습니다.
정적 메서드 isEqual( )에 대해서 살펴보기 위해서는, 우선 선행적으로 이해하고 있어야 하는 메서드가 있습니다. 바로 java.util.Objects.equals( )죠.
뜬금 없이 왜 메서드 equals( )를 왜 갖고 나왔는지 의아하시겠지만, 정적 메서드 isEqual의 동작이 이 equals( )를 기반으로 이루어지기 때문입니다. 간단한 메서드이지만 혹시라도 잊고 있다면 이번 아티클의 내용을 이해하기 힘들어집니다.
기본적으로 정적 메서드 isEqual( )은 targetObject와 sourceObject 두 가지를 비교하는 동작을 하게 됩니다. isEqual( )에서 targetObject를 인자로 받고 test( )에서 sourceObject를 인자로 받게 되는데요, 사용법이 헷갈릴 수 있으니 기본 폼을 아래와 같이 살펴보겠습니다.
Predicate<Object> predicate = Predicate.isEqual(targetObject);
boolean result = predicate.test(sourceObject);
/* 사실상 Objects.equals(sourceObject, targetObject)를 실행한다.
즉, targetObject와 sourceObject에 대해서 동등 비교를 하게 되는 것! */
실제로는 Objects.equals(souceObject, targetObject)가 실행되는 개념이라고 했죠? 실행에 따른 리턴 값은 아래와 같이 생성됩니다.
sourceObject | targetObject | 리턴 값 |
null | null | true |
not null | null | false |
null | not null | false |
not null | not null | sourceObject.equals(targetObject)의 리턴 값 |
import java.util.function.Predicate;
public class ExampleMain {
public static void main(String[] args) {
Predicate<String> predicate;
predicate = Predicate.isEqual(null);
System.out.println("null, null: " + predicate.test(null));
predicate = Predicate.isEqual("Swings");
System.out.println("null, Swings: " + predicate.test(null));
predicate = Predicate.isEqual("null");
System.out.println("Swings, null: " + predicate.test("Swings"));
predicate = Predicate.isEqual("Swings");
System.out.println("Swings, Swings: " + predicate.test("Swings"));
}
}
/* 출력
null, null: true
null, Swings: false
Swings, null: false
Swings, Swings: true
*/
'Programming > JAVA' 카테고리의 다른 글
람다식(5) - 메서드 참조 1 : 메서드 참조의 개념 (1) | 2023.08.31 |
---|---|
람다식(4) - 표준 API의 함수적 인터페이스 9 : minBy(), maxBy() 정적 메서드 (1) | 2023.08.28 |
람다식(4) - 표준 API의 함수적 인터페이스 8 : 디폴트 메서드 and(), or(), negate() 그리고 정적 메서드 isEqual() 1 (0) | 2023.08.04 |
람다식(4) - 표준 API의 함수적 인터페이스 7 : 디폴트 메서드 andThen(), compose() 3 (0) | 2023.07.31 |
람다식(4) - 표준 API의 함수적 인터페이스 7 : 디폴트 메서드 andThen(), compose() 2 (0) | 2023.07.27 |