
인프런 워밍업 클럽 스터디 1기 BE 3번째 과제
10개월 전
람다 표현식이란?
람다 표현식 줄여서 람다식이란 메서드를 간결한 함수식으로 표현한 것이다.
그리고 함수형 프로그래밍을 구성하기 위한 함수식이라고 하는데
람다식이 나오게 된 이유는 객체 지향 프로그래밍 언어인 자바에서
함수형 프로그래밍을 사용하기 위해서 Java 8버전 부터 추가되었다.
자바에서 메서드를 사용하려면 클래스를 정의하고 메서드를 작성해야 하지만
람다식으로 표현하면 메서드의 이름과 반환타입을 생략할 수 있다.
int add(int x, int y) {
return x + y;
}
// 람다식으로 표현
// 메서드명과 반환타입 생략 가능
(int x, int y) -> {
return x + y;
}
// 매개변수 타입도 생략 가능
(x, y) -> x + y;
람다식과 익명 클래스
어떻게 클래스를 만들지 않고 메서드를 작성할 수 있는 걸까?
자바에는 이름이 없는 클래스인 익명 클래스가 있는데
익명 클래스는 클래스를 따로 정의하지 않고 바로 객체로 생성해 한번만 사용할 수 있다.
이 익명 클래스를 짧게 표현하면 람다식이 되는 것이다.
interface Add {
int add(int x, int y);
}
// 익명 클래스
Add a = new Add() {
public int add(int x, int y) {
return x + y;
}
};
// 람다식
Add a = (x, y) -> {return x + y;};
여기서 익명 클래스와 람다식을 대입 받는 변수가 필요한데
이 변수는 인터페이스를 사용해야 하고
이 인터페이스를 함수형 인터페이스라고 한다.
함수형 인터페이스(functional interface)
단 하나의 추상 메서드가 선언된 인터페이스를 함수형 인터페이스라고 한다.
그리고 람다식은 함수형 인터페이스의 추상 메서드의 구현 부분을 짧게 표현한 것
이 함수형 인터페이스의 추상 메서드를 통해서 타입을 추론할 수 있기 때문에 타입의 생략이 가능하다.
@FunctionalInterface
이 어노테이션을 인터페이스에 붙여주면 두 개 이상의 추상 메서드가 선언되지 않도록 컴파일러가 체크해줘서 실수를 줄일 수 있다.
참고
댓글을 작성해보세요.