본문 바로가기

Java

자바 람다식 Lambda expression

자바 람다식 Lambda expression

🌞 람다식이란?

익명함수를 간결하게 표현한 것


컬렉션이나 스트림API를 처리할 때나,
간단한 작업을 한줄 코드로 처리할때 사용된다.

 

✔등장배경

자바는 객체지향형 프로그래밍 oop 을 지향한다.

하지만 자바8부터  oop의 한계점을 극복하기 위해 함수형 프로그래밍 개념을 도입했다.

 

✔ oop의 한계점.

반복 코드가 많다
병렬 처리가 어렵다
데이터 흐름을 추상화하기 어렵다 등

 

  자바 람다식의 기본형태
(입력값) -> {처리내용}

(x, y) -> x + y // "x와 y를 받아서 더한 결과를 줘"

 

✔ 자바 람다식 사용방법 
람다식을 자바에서 사용하려면 함수형 인터페이스가 필요하다.
함수형 인터페이스는 단 하나의 추상메서드만 가지고 있는 인터페이스다.

@FunctionalInterface
public interface MyFunctionalInterface {
void something();
}

package ch01;

/**
 * 람다식을 사용하기 위해
 * 인터페이스 안에는
 * 단 하나의 추상메서드만 존재해야 한다.
 */
@FunctionalInterface
public interface MathOperation {

    int operate(int x, int y);
    //double operates(int x, int y);

}

 

package ch01;

/**
 * 🌞함수형 인터페이스를 선언하면
 * 미리 식을 만들어 쓰는 것이 아니라
 * 사용할 때
 * 즉시 식을 만들어 활용할 수 있다
 * 
 * 정리해보면
 * 
 * 람다식과 함수형 프로그래밍은
 * 객체 지향 프로그래밍 상태와 동작을 함께 관리하고
 * 구조적으로 코드를 작성하는데 강점이 있다
 * 
 * 람다식과 함수형 프로그래밍은
 * 간단한 동작을 간결하게 표현하며
 * 함수 자체를 유연하게 재사용할 수 있다
 */
public class MathOperationTest {

    public static void main(String[] args) {

        //각 연산을 람다식으로 정의
        MathOperation add = (x, y) -> x + y;
        //Calc add = ?
        //Calc 인터페이스에는 추상메서드가 여러개라서 람다식이 안만들어진다.

        MathOperation sub = (x, y) -> x - y;
        MathOperation mul = (x, y) -> x * y;
        MathOperation div = (x, y) -> {
            if (y == 0) {
                throw new IllegalArgumentException("Cannot divide by zero");
            }
            return x / y;
        };

        System.out.println("10 + 5 = " + add.operate(10, 5));
        System.out.println("10 - 5 = " + sub.operate(10, 5));
        System.out.println("10 * 5 = " + mul.operate(10, 5));
        System.out.println("10 / 5 = " + div.operate(10, 5));

        new Thread();

    }//main

}//MathOperationTest