본문 바로가기

라이브러리 활용 - 람다식

람다식

람다식

  • 함수형 프로그래밍: 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법
  • 데이터 처리부는 제공된 함수의 입력값으로 데이터를 넣고 함수에 정의된 처리 내용을 실행
  • 람다식: 데이터 처리부에 제공되는 함수 역할을 하는 매개변수를 가진 중괄호 블록이다.
  • 자바는 람다식을 익명 구현 객체로 변환


    출처, 이것이 자바다



    출처, 이것이 자바다


함수형 인터페이스

  • 인터페이스가 단 하나의 추상 메소드를 가지는 것


    출처, 이것이 자바다


  • 인터페이스가 함수형 인터페이스임을 보장하기 위해서는 @FunctionalInterface 어노테이션을 붙임
  • @FunctionalInterface: 컴파일 과정에서 추상 메소드가 하나인지 검사해 정확한 함수형 인터페이스를 작성할 수 있게 도와주는 역할
package ch16.sec01;

/*
 람다식? 메소드를 하나의 식으로 표현한 것. 함수 또는 메소드명이 없이 매개변수와 실행구문으로 사용하여 만들수 있다. 그래서 익명 함수라고 부름.

함수형 인터페이스 - 하나의 기능을 제공하는 단 1개의 추상 메소드로 정의되어 있는 인터페이스
단 추상 메소드 외에 디폴트 메소드, 정적 메소드는 사용가능하다. 
목적 : 람다식문법으로 사용하고자 한다.
*/

//인터페이스, 함수형 인터페이스는 구현 클래스를 사용하지 않고, 람다식을 사용하여 작업할 수가 있다.
@FunctionalInterface //컴파일러에게 이 인터페이스가 함수형 인터페이스 라는 것을 제공.
public interface Calculable {

    //추상 메소드
    void calculate(int x, int y);

    /*
     람다식으로 표현.(메소드 이름은 제외)
     (x, y) -> {
            int result = x + y;
            System.out.println("result: " + result);
        }
     */
}

package ch16.sec01;

public class LambdaExample {

    public static void main(String[] args) {

        //1)구현 클래스가 만들어져 있지않다.
        //2)구현 객체 생성이 없다.

        //메소드 호출시 매개변수가 함수적 인터페이스로 되어 있다면,
        //매개변수에 람다식 구문을 사용하여, 작업 할 수가 있다.
        //함수형 인터페이스에 있는 추상 메소드를 람다식 문법으로 구현하여 제공함.
        //결과적으로 추상 메소드를 람다식으로 구현한 형태
        action((x, y) -> {
            int result = x + y;
            System.out.println("result: " + result);
        });

        action((x, y) -> {
            int result = x - y;
            System.out.println("result: " + result);
        });
    }

    //매개변수가 함수형 인터페이스 Calculable calculable
    //이 메소드 호출시 람다식으로 매개변수의 정보를 제공할 수가 있다.

//    Calculable calculable = (x, y) -> {
//        int result = x - y;
//        System.out.println("result: " + result);
//    };

    public static void action(Calculable calculable) {
        //데이터
        int x = 10;
        int y = 4;
        //데이터 처리
        calculable.calculate(x, y);
    }
}

package ch16.sec01;

/*
 함수형 인터페이스에 람다 구문을 매개변수의 값으로 사용하는 예제.
 */

@FunctionalInterface
interface MyLambdaFunction {
    int max(int a, int b);
}

public class LambdaExample2 {

    public static void main(String[] args) {

        //람다식을 이용한 익명 함수
        //함수형 인터페이스 변수에 추상 메소드를 구현한 람다식을 값으로 대입.
        MyLambdaFunction lambdaFunction = (int a, int b) -> { return (a > b) ? a:b; };
        System.out.println(lambdaFunction.max(3, 5));
    }
}

매개변수가 없는 람다식

  • 함수형 인터페이스의 추상 메소드에 매개변수가 없을 경우 람다식 작성하기
  • 실행문이 두 개 이상일 경우에는 중괄호를 생략할 수 없고, 하나일 경우에만 생략할 수 있음


    출처, 이것이 자바다



    출처, 이것이 자바다


매개변수가 있는 람다식

  • 함수형 인터페이스의 추상 메소드에 매개변수가 있을 경우 람다식 작성하기
  • 매개변수를 선언할 때 타입은 생략할 수 있고, 구체적인 타입 대신에 var를 사용할 수 있음


    출처, 이것이 자바다


  • 매개변수가 하나일 경우에는 괄호를 생략 가능. 이때는 타입 또는 var를 붙일 수 없음


    출처, 이것이 자바다


리턴값이 있는 람다식

  • 함수형 인터페이스의 추상 메소드에 리턴값이 있을 경우 람다식 작성하기
  • return 문 하나만 있을 경우에는 중괄호와 함께 return 키워드를 생략 가능
  • 리턴값은 연산식 또는 리턴값 있는 메소드 호출로 대체 가능


    출처, 이것이 자바다


'라이브러리 활용 - 람다식' 카테고리의 다른 글

생성자 참조  (0) 2023.02.07
메소드 참조  (0) 2023.02.07