람다식(Lambda Expression)
- 함수(메서드)를 간단힌 식으로 표현한는 방법
- 익명함수(이름이 없는 함수)
- 함수와 메서드의 차이
- 근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어
- 함수는 클래스에 독립적, 메서드는 클래스에 종속적
람다식 작성하기
- 메서드의 이름과 반환타입을 제거하고 '->' 를 블록 {} 앞에 추가한다.
- 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(끝에 ' ; ' 안 붙임)
- 매개변수의 타입이 추론 가능하면 생략가능(부분의 경우 생략 가능)
//일반 메소드
int max (int a, int b) {
return a > b ? a : b ;
//람다식 (함수)
(a,b) -> a > b ? a : b
작성시 주의사항
- 매개변수가 하나인 경우, 괄호() 생략가능(타입이 없을 때만)
// 생략 가능한 코드
(a) -> a * a
a -> a * a (o)
// 생략 불가한 코드
int a -> a * a (x)
(int a) -> a * a (o)
- 블록 안의 문장이 하나뿐 일 때, 괄호{} 생략가능(끝에 ' ; ' 안 붙임)
(int i) -> { System.out.println(i) ; }
(int i) -> System.out.prinln(i)
람다식은 익명 객체
- 람다식은 익명 함수가 아니라 익명 객체이다.
- 람다식(익명 객체)을 다루기 위한 참조변수가 필요.
함수형 인터페이스
- 단 하나의 추상 메서드만 선언된 인터페이스
My Function f = new MyFunction() {
public int max (int a, int b) {
return a > b ? a : b ;
}
}
- 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음
- 람다식을 다루기 위한 참조변수의 타입은 함수형 인터페이스로 한다.
Myfunction f = (a , b) -> a > b ? a : b;
함수형 인터페이스 타입의 매개변수, 반환타입
- 함수형 인터페이스 타입의 반환타입
void aMethod (MyFunction f) {
f.myMethod(); // MyFunction에 정의된 메소드 호출
}
Myfunction f = () -> System.out.println("myMethod");
aMethod(f);
aMethod(() -> System.out.println("myMethod"));
@FunctionalInterface
interface MyFunction {
void myMethod();
}
- 함수형 인터페이스의 타입의 반한타입
MyFunction myMethod() {
My function f = () -> {};
return f;
}
MyFunction myMethod() {
return () -> {}
}
'Language > Java' 카테고리의 다른 글
Chapter 2. 변수 (variable) (0) | 2022.12.03 |
---|---|
Chapter 14. 스트림(stream) (0) | 2022.11.30 |
컬렉션(Collection)과 제네릭(Generic) (2) (0) | 2022.11.28 |
컬렉션(Collection)과 제네릭(Generic) (1) (0) | 2022.11.28 |
예외처리 (0) | 2022.11.28 |