본문 바로가기
Java

[Java] 람다 표현식, 람다란?

by parkjp 2017. 9. 6.

 

1. 람다 표현식(Lambda Expressions)이란?

 

 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.

 

* 람다의 특징

 

A. 익명

 

 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다.

 

B. 함수

 

 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다.

 

C. 전달

 

 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.

 

D. 간결성

 

 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다.

 

 

람다식의 예 )

 

- 기존 코드

 

Comparator<Apple> byWeight = new Comparator<Apple>() {
@Override
public int compare(Apple a1, Apple a2) {
return a1.getWeight().compareTo(a2.getWeight());
}
};

 

- 람다식

 

Comparator<Apple> byWeight = (Apple a1, Apple a2)

    -> a1.getWeight().compareTo(a2.getWeight());

 

 위 예제처럼 람다식이 훨씬 간결해 보인다. 람다는 세 부분으로 이루어진다.

 

- 파라미터 리스트

 

 Comparator의 compare 메서드의 파라미터(두 개의 사과).

 

- 화살표

 

 화살표(->)는 람다의 파라미터 리스트와 바디를 구분한다.

 

- 람다의 바디

 

 두 사과의 무게를 비교한다. 람다의 반환값에 해당하는 표현식이다.

 

- 유효한 람다 표현식

 

* (parameters) -> expression

* (parameters) -> { expression }

* () -> { expression }

* () -> expression

 

 

2. 함수형 인터페이스 (Functional Interface)

 

 함수형 인터페이스는 정확히 하나의 추상 메서드를 지정하는 인터페이스이다. 

 

함수형 인터페이스 예 )

 

public interface FuncInterface {

int add(int a, int b);

}

 

 만약 FuncInterface가 추상 메소드가 없거나 두 개 이상의 추상메소드를 가지고 있다면 함수형 인터페이스라 할 수 없다.

 

FuncInterface func = (int a, int b) -> a + b;

 

반응형