자바

[JAVA] 프레디게이트란?

뇌장하드 2022. 6. 2. 20:14

수학에서 인수로 값을 받아 true나 false로 반환을 해주는 함수를 프레디케이트(predicate)라고 한다.

 

선택조건을 결정하는 인터페이스 

public interface ApplePredicate{
      boolean test(Apple apple);
    }

 

 

이제 상속을 받아서 여러가지 조건을 달아준다.

 public class AppleHeavyWeightPredicate implements ApplePredicate{
      public boolean test(Apple apple){
        return apple.getWeight()>150;
      }
    }
public class AppleGreenColorPredicate implements ApplePredicate{
      public boolean test(Apple apple){
        return "green".equals(apple.getColor());
      }
    }

 

 

 public static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) {
    List<Apple> result = new ArrayList<>();
    for (Apple apple : inventory) {
      if (p.test(apple)) {
        result.add(apple);
      }
    }
    return result;
  }

위와같이 다양한 조건을 가진 프레디케이트를 인자로 받으면 하나의 메서드를 안고치고 사용자가 요구하는 조건들을 만족시킬수 있다.

 

하지만 새로운 클래스와 인스턴스를 생성하는게 귀찮은 개발자들은 람다식을 이용하여 더 간결하게 코드 작성이가능하다.

 

List<Apple> result=filterApples(inventory,(Apple apple) -> "red".equals(apple.getColor()));

한줄로 해결이 가능하다 

이와같이 람다가 나오는 과정을 알아보았다.