[JAVA] 간단한 Predicate<T>

2024. 3. 31. 12:23Languages/JAVA

 

 

📝 Modern Java in Action(강력 추천!!)을 통해 Java를 공부하고 있습니다. 틀리거나 다른 부분이 있을 수 있습니다.

 

 

책에 있는 내용을 공부하고, 입력된 숫자 중에서 홀수를 추출해보려고 합니다.

 

 

함수형 인터페이스

함수형 인터페이스는 하나의 추상 메서드를 지정하는 인터페이스라고 합니다. 함수형 인터페이스를 이야기하는 이유는, 람다는 함수형 인퍼페이스라는 문맥에서 사용할 수 있기 때문입니다.

 

람다란?

그렇다면 람다란 무엇일까요? 람다는 파라미터를 받아, 표현식(expression)이나 구문(statement)를 반환하는 역할을 하고 있습니다. 아래는 책에서 람다를 설명하는 부분입니다.

 

람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다.

 

람다를 사용하는 이유는, 메서드를 파라미터로 받을 수 있다는 점과 코드를 간결하게 구현하여 값을 전달할 수 있기 때문입니다.

 

숫자중에 홀수를 알고 싶어

람다를 활용해서, 다양하게 입력된 숫자 중 홀수가 어떤 것들이 있는지 알고 싶었습니다.

 

1. 함수형 인터페이스와 test를 할 수 있는 Predicate<T>를 만들어보자!

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

public <T> List<T> filter(List<T> numList, Predicate<T> pre){
    List<T> nums = new ArrayList<>();
    for(T num : numList){
        if(pre.test(num)){
            nums.add(num);
        }
    }
    return nums;
}

 

@FunctionalInterface를 통해 함수형 인터페이스를 만들어주려고 합니다. 

 

2. 숫자들을 numList에 추가하여, 홀수를 추출할 수 있는 코드를 만들어보자

public static void main(String[] args) {
    Testing test = new Testing();

    List<Integer> numList = new ArrayList<>();
    numList.add(1);
    numList.add(2);
    numList.add(3);
    numList.add(4);
    numList.add(5);

    Predicate<Integer> odd = (Integer i) -> i % 2 != 0;
    List<Integer> oddNumList = test.filter(numList, odd);

    System.out.println("oddNumber? : " + oddNumList);
}

 

참고로 class는 Testing입니다. numList에 1,2,3,4,5를 추가하였습니다. 이후 2로 나눈 나머지가 2가 아닌 Predicate를 만들어줬습니다. numList와 Predicate를 이용하여, filter를 통해 홀수가 나오는지 확인하였습니다.

 

홀수인 1,3,5가 나오는 것을 확인할 수 있었습니다.

 

 

References

1. Modern in Java Action [모던 자바 인 액션] - 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트 지음, 우정은 옮김, 한빛미디어 

 

'Languages > JAVA' 카테고리의 다른 글

[JAVA] Optional  (2) 2024.09.08
[JAVA] max()  (0) 2024.04.04
[JAVA] Stream  (0) 2024.01.24
[JAVA] 입출력 스트림  (0) 2023.05.30
[JAVA] 인터페이스, 컬렉션 프레임워크, 스레드  (0) 2023.05.26