람다식(Lambda Expression)
Java : oop(객체지향 언어) 1.8버전부터 fp(함수형언어) 추가
함수(메서드)를 간단히 식(expression)으로 표현하는 방법
int max(int a, int b){
return a > b ? a : b;
}
간단히
(a, b) -> a > b ? a : b (람다식)
익명 함수(이름이 없는 함수, anonymous function)
함수와 메소드의 차이
- 근본적으로 동일, 함수는 일반적 용어, 메소드는 객체지향개념 용어
- 함수는 클래스에 독립적(클래스 밖에 존재), 메소드는 클래스에 종속적(클래스 안에 있어야함)
람다식 작성하기 함수(메소드)를 간단히 표현.
1.메서드의 이름과 반환타입을 제거하고 '->' 블록{}앞에 추가한다
(int a, int b) -> {
return a > b ? a : b;
}
2.반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(끝에 ; 안 붙임)
(int a, int b) -> a > b ? a : b
3.매개변수의 타입이 추론 가능하면 생략가능(대부분의 경우 생략가능)
(a, b) -> a > b ? a : b
람다식 작성하기 - 주의사항
1. 매개변수가 하나인 경우, 괄호() 생략가능(타입이 없을때만)
a -> a * a // OK
int a -> a * a // 에러 괄호가 있어야함
2.블록 안의 문장이 하나뿐 일 때, 괄호{}생략가능(끝에 ; 안 붙임)
(int i) -> System.out.println(i)
| 메소드 | 람다식 |
| int max(int a, int b){ return a > b ? a : b; } |
(a, b) -> a > b ? a : b |
| int printVar(String name, int i){ System.out.println(name+"="i); } |
(name, i) -> System.out.println(...) |
| int square(int x) { return x * x } |
x -> x * x |
| int roll(){ return (int)(Math.random()*6); } |
() -> (int)((Math.random()*6); |
람다식은 익명 객체이다.
- 람다식은 익명 함수가 아니라 익명 객체이다.
(a,b) -> a > b ? a : b
==
new Object(){
int max(int a, int b){
return a > b ? a : b;
}
}
람다식(익명 객체)을 다루기 위한 참조변수가 필요. 참조 변수의 타입은?
타입 obj = (a , b) -> a > b ? a : b
int value = obj.max(3,5) // 에러 Object 클래스에 max()가 없음 Object로 호출 불가
Object obj = new Object(){
int max(int a, int b){
return a > b ? a : b
}
}
int value = obj.max(3,5) //에러 obj에 max라는 메소드가 없기때문
함수명 인터페이스가 필요함
'하.. > java' 카테고리의 다른 글
| ch14 java.util.function 패키지 (0) | 2021.12.25 |
|---|---|
| ch14 함수형 인터페이스 (0) | 2021.12.25 |
| ch13 wait()과 notify() (0) | 2021.12.25 |
| ch13 스레드의 동기화(synchronization) (0) | 2021.12.25 |
| ch13 join() yield() (0) | 2021.12.25 |