자바 공부 28 : 람다(lambda)

친환경 개발자
|2024. 3. 7. 02:21

람다(lambda)

  • 익명 함수를 의미
  • 함수형 프로그래밍을 지원하기 위해 Java8버전부터 도입
  • 코드 가독성 상승을 위한 축약된 형태의 문법

 

람다 표현식 구조

(매개변수) -> 반환할값

 

 

입력할 값을 매개변수 란에 입력받아 -> 뒤의 함수식을 거쳐 생성된 값으로 반환

 

단, 인터페이스 사용 시 인터페이스의 메서드가 1개 이상이면 람다 함수 사용 불가

>> 람다함수로 사용할 인터페이스는 @FunctionalInterface 어노테이션 사용

@FunctionalInterface     //함수형 인터페이스: 단 한개의 메서드만 가질 수 있음.

interface Cal_2 {
    int sum(int a, int b);
}

public class Lambda {
    public static void main(String[] args) {
        Cal_2 mc1 = (a, b) -> a+b;     //인터페이스에 이미 입력값의 자료형이 정의되어 있으므로 (a, b)만 써도 가능
        Cal_2 mc2 = Integer::sum;     //Integer.sum(int a, int b)과도 동일하므로 Integer::sum으로도 요약 가능
        int result1 = mc1.sum(3, 4);
        int result2 = mc2.sum(3, 4);
        System.out.println(result1);
        System.out.println(result2);
    }
}

 

함수형 인터페이스 : BiFunction, BinaryOperator

두 인수를 받아 하나의 결과를 생성하는 기능 구현 시 사용

인터페이스 선언 없이 사용하여

더 축약하여 표현 가능한 방법이다.

 

BiFunction은 <>제네릭스 안에 입력항목 2개, 출력항목 1개의 자료형을 입력,

BinaryOperator는 입출력항목의 자료형이 모두 동일한 경우 <>제네릭스 안이 1가지만 사용


import java.util.function.BiFunction;
import java.util.function.BinaryOperator;  //입출력항목이 모두 동일할 경우

public class Lambda {
    public static void main(String[] args) {
        BiFunction<Integer, Integer, Integer> mc3 = (a, b) -> a+b;  
                                                                    //제공되는 인터페이스인 BiFunction으로 더 축약 표현 가능
                                                                    // BiFunction<입력자료형1, 입력자료형2, 출력자료형3>
        int result3 = mc3.apply(3,4);       // sum이 아닌 apply메서드를 사용해야 함
        System.out.println(result3);

        BinaryOperator<Integer> mc4 = (a, b) -> a+b;
        int result4 = mc4.apply(3, 4);
        System.out.println(result4);
    }
}