Predicate

sungs·2025년 6월 28일

자바

목록 보기
23/95

✅ Predicate란?

Predicate<T>는 하나의 입력을 받아 true 또는 false를 반환하는 함수형 인터페이스다.

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

즉, 특정 조건을 검사하는 용도로 쓰이며, Stream API의 filter 메서드 등과 함께 자주 사용된다.

🔧 기본 사용법

Predicate<String> isNotEmpty = s -> !s.isEmpty();

System.out.println(isNotEmpty.test("hello")); // true
System.out.println(isNotEmpty.test(""));      // false

🧩 주요 메서드

1. test(T t)

가장 기본적인 메서드. 입력값에 대해 조건을 검사한다.

Predicate<Integer> isEven = n -> n % 2 == 0;
System.out.println(isEven.test(4)); // true

2. and(Predicate other)

두 조건이 모두 true일 때 true 반환

Predicate<Integer> isPositive = n -> n > 0;
Predicate<Integer> isEven = n -> n % 2 == 0;

Predicate<Integer> isPositiveAndEven = isPositive.and(isEven);
System.out.println(isPositiveAndEven.test(4)); // true
System.out.println(isPositiveAndEven.test(-2)); // false

3. or(Predicate other)

하나라도 true면 true 반환

Predicate<Integer> isZero = n -> n == 0;
Predicate<Integer> isNegative = n -> n < 0;

Predicate<Integer> isZeroOrNegative = isZero.or(isNegative);
System.out.println(isZeroOrNegative.test(-5)); // true
System.out.println(isZeroOrNegative.test(0));  // true
System.out.println(isZeroOrNegative.test(3));  // false

4. negate()

조건을 반대로 뒤집음

Predicate<String> isEmpty = String::isEmpty;
Predicate<String> isNotEmpty = isEmpty.negate();

System.out.println(isNotEmpty.test(""));      // false
System.out.println(isNotEmpty.test("java"));  // true

🔍 실전 예제: Stream + Predicate

List<String> names = List.of("Alice", "", "Bob", "", "Charlie");

List<String> filtered = names.stream()
    .filter(((Predicate<String>) String::isEmpty).negate()) // 빈 문자열 제거
    .collect(Collectors.toList());

System.out.println(filtered); // [Alice, Bob, Charlie]

✅ 요약

기능메서드설명
조건 검사test(T t)기본 조건 검사
ANDand(Predicate)두 조건 모두 만족할 때
ORor(Predicate)하나라도 만족할 때
NOTnegate()조건 반전

✨ 마무리

Predicate는 자바에서 조건문을 더욱 유연하고 재사용 가능하게 만들어주는 강력한 도구다. Stream, Optional, 사용자 정의 조건 분리 등에 널리 활용되므로 자바 개발자라면 반드시 익혀야 할 인터페이스 중 하나다.

profile
앱 개발 공부 중

0개의 댓글