[Java] Java 8: Lamda Expressions & Functional Interfaces

sj·2022년 12월 4일

Java

목록 보기
5/7

람다 표현식

  • 메서드를 하나의 식으로 표현한 것
  • 람다식은 익명 객체이다.

일반 메서드

int sum(int x, int y) {
	return x + y;
}

람다 표현식

(x, y) -> x + y;

함수형 인터페이스

  • 추상 메서드가 오직 하나 존재하는 인터페이스이다.
  • 람다식은 함수형 인터페이스의 구현체이다.

다음과 같이 @FunctionalInterface 어노테이션을 사용하여 함수형 인터페이스임을 명시할 수 있다. 이 어노테이션을 사용하면 부적절한 메서드를 추가하거나 다른 인터페이스를 상속받으면 컴파일 에러가 발생한다. Sum 함수를 함수형 인터페이스로 만들 수 있다.

@FunctionalInterface
public interface Sum {
    int intSum(int x, int y);
}

그러면 아래와 같이 람다식으로 사용이 가능하다.

import ...Sum;

public class Main { 
    Sum sum = (a, b) -> a + b;
    System.out.println(sum.intSum(1, 2));
}

물론 intSum은 추상 메서드이기 때문에 아래와 같이 마음대로 구현할 수 있다.

import ...Sum;

public class Main { 
    Sum sum = (a, b) -> a - b;
    System.out.println(sum.intSum(1, 2));
}

구현하고자 하는 람다식이 이미 구현되어 있는 경우가 있다. 이 구현되어 있는 메서드를 아래와 같이 사용할 수 있는데 이 방식을 메서드 레퍼런스라 한다.

import ...Sum;

public class Main { 
	Sum sum = Integer::sum;
    System.out.println(sum.intSum(1, 2));
}

0개의 댓글