[STUDY] 240322 | Lambda | 함수형 인터페이스②

Nimgnos·2024년 4월 16일
0

👾 STUDY

목록 보기
38/40

💻 Lambda(람다)

  • 람다 함수는 함수형 프로그래밍에서 중요한 개념 중 하나로, 익명 함수(anonymous function)라고도 함.
  • 이름이 없는 함수로, 일반적으로 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우에 유용하게 사용됨.

🤓 예제


예제 1.

  • 두 정수를 매개변수로 받아 합이 10보다 작으면 리턴 True
  • 두 정수를 매개변수로 받아 두 수가 같으면 리턴 True
//Predicate <T> : boolean test (T t)
//BiPredicate<T, R> : boolean test(T t, U u)
import java.util.function.BiPredicate;
import java.util.function.Predicate;

public class PredicateTest {
    public static void main(String[] args) {
        //매개변수로 전달된 수가 짝수면 리턴 true
        //                              (리턴문 지우면 중괄호 생략 가능)
        //Predicate<Integer> p1 = (num) -> {return num % 2 == 0;};
        Predicate<Integer> p1 = (num) -> num % 2 == 0;
        System.out.println(p1.test(2));

        //매개변수로 전달된 두 정수의 합이 짝수면 리턴 true
        BiPredicate<Integer, Integer> p2 = (a, b) -> (a + b) % 2 == 0;;
        System.out.println(p2.test(10, 10));

        //두 정수가 매개변수로 들어가고, 두 수의 합이 짝수면 리턴 true
        ccc(10, 20, p2);

        //BiPredicate 안의 test 메소드 기능이 그대로 들어옴
        //(aaa)
        ccc(10, 20, (num1, num2) -> num1 + num2 < 10);

        //bbb
        ccc(10, 20, (num1, num2) -> num1 == num2);

    }
    //메소드 구현 -> 람다식에 넣기
    //public boolean test(Integer num){
    //return num % 2 == 0;
   // }

    //두 정수를 매개변수로 받아 합이 10보다 작으면 리턴 true
    public static boolean aaa(int num1, int num2){
        return num1 + num2 < 10;
    }

    //두 정수를 매개변수로 받아 두 수가 같으면 리턴 true
    public static boolean bbb(int num1, int num2){
        return num1 == num2;
    }

    public static boolean ccc(int num1, int num2, BiPredicate<Integer, Integer> p){
        return p.test(num1, num2);
    }
}

Supplier<T>

  • 입력 없이 결과를 반환하는 함수를 정의
  • T get( ) 메서드를 가지며, 이 메서드는 아무런 매개변수를 받지 않고 결과 T를 반환함. 주로 입력 받는 방식을 결정해 파라미터 없이 특정 결과를 생성하는데 사용됨.
  • Supplier를 활용하면 추상메서드 get( )을 통해 Lazy Evalution 가능
    • Lazy Evalution란?
      불필요한 연산을 피하기 위해 연산을 지연시키는 행위

예제 2.

  • 1 ~ 10까지의 수 중 랜덤한 정수를 리턴
import java.util.function.Supplier;

//Supplier<T> : T get()
public class SupplierTest {
    public static void main(String[] args) {
        //1~10까지의 수 중 랜덤한 정수를 리턴
        Supplier<Integer> s1 = () -> {
            int rand = (int)(Math.random() * 10 + 1);
            return rand;
        };
        int r1 = s1.get();
        System.out.println(r1);
    }
}

🔍 참조

profile
먹고 기도하고 코딩하라

0개의 댓글