본문 바로가기
Language/JAVA

람다식과 함수형 인터페이스

by YoonJong 2023. 2. 13.
728x90

람다식은 메서드를 하나의 식(expression) 으로 표현하는 것을 의미합니다.

또한 람다식은 익명 함수, 익명 객체 라고도 하는데, 자바에서는 함수와 메서드를 같은 의미로 사용합니다.

 

람다식의 작성법은 아래와 같습니다.

 

반환타입 메서드이름 (매개변수 선언) -> {
    ...
}

 

기초적인 예시를 들어보겠습니다. 예시는 자바의 정석을 참고했습니다.

int max(int a,  int b) {
	return a > b ? a : b;
}

//변환
(a , b) -> a > b ? a : b
int person(String name, int i) {
	System.out.println(name + "=" + i);
}

// 변환
(name , i) -> System.out.println(name+ "=" + i);
int square(int x) {
	return x * x;
}

//변환
x -> x * x

 

람다식으로 정의된 익명 객체의 메서드를 호출하기 위해서는 함수형 인터페이스를 통해 호출할 수 있다.

Object 타입으로는 익명 클래스와 동등한 람다식에 정의되어있는 메서드를 실행할 수 없다.

 

람다식에는 메서드 이름이 없기 때문에, 함수형 인터페이스를 통해 max 라는 이름을 붙여준 것과 같다.

public class Ex14_9 {
    public static void main(String[] args) {

        MyFunctionTest obj = new MyFunctionTest() {
            public int max(int a, int b) {
                return a > b ? a : b;
            }
        };

        int value1 = obj.max(3, 5); // 함수형 인터페이스 사용해야 함 , 타입이 있어야 함
        System.out.println("value1 = " + value1);

		//람다식을 다루기 위한 참조변수의 타입은 함수형 인터페이스로 한다.
        MyFunctionTest objLambda = (a, b) -> a > b ? a : b;

        int value2 = objLambda.max(3, 5);
        System.out.println("value2 = " + value2);
    }
}

@FunctionalInterface //함수형 인터페이스는 단 하나의 추상 메서드만 가져야 한다.
interface MyFunctionTest {
    int max(int a, int b);
}

//결과값
value1 = 5
value2 = 5

 

728x90

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

스트림의 중간, 최종연산  (0) 2023.02.15
스트림(Stream) 의 특징  (0) 2023.02.13
쓰레드 동기화(Synchronization)  (0) 2023.02.13
Thread.sleep() 과 interrupted()  (0) 2023.02.12
쓰레드(Thread) 는 무엇일까?  (0) 2023.02.12

댓글