728x90
반응형
람다식이란??
메소드를 하나의 식으로 표현한 것.
익명 함수(annonymous function)이라고도 한다.
이를 사용하면 기존의 함수를 간단하고 명확한 식으로 표현할 수 있게 된다.
함수형 언어
JDK1.8부터 함수형 언어의 기능을 java가 지원하기 시작했다.
그래서 java는 oop언어임과 동시에 함수형 언어의 기능을 포함하고 있다.
람다식이란??
1. 함수(메서드)를 간단한 식으로 표현하는 방법이다.
예를 들어
// 메서드
int max(int a, int b) {
return a > b ? a : b;
}
요런 애를
// 람다식
(a, b) -> a > b ? a : b
이런 식으로 간단하게 표현하는 것이다.
2. 람다식은 익명 함수(anonymous function)이다.
위의 예시에서 볼 수 있듯 반환타입
과 이름
을 지운다.
그리고 화살표(->
)를 통해 표현시킨다.
이렇게 표현하기 때문에 익명함수라고 한다.
람다식 작성하는 방법
1. 메서드의 이름, 반환타입 제거 후 ->
를 블록 앞에 추가하기(익명함수로서)
int max(int a, int b) {
return a > b ? a : b;
}
를
(int a, int b) -> {
return a > b ? a : b;
}
이런 식으로 변경하는 것이다.
2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략가능(끝에 ;
안붙임)
이렇게 하면 더 간단해진다.
(int a, int b) -> {
return a > b ? a : b;
}
에서 추가로 return쪽을 생략해준다. (;
도 생략)
(int a, int b) -> a > b ? a : b
이렇게 하면 더 간단해진다!!
참고로 이경우는 반환값이 있을때이다.
3. 매개변수의 타입이 추론 가능하면 생략가능(대부분 다 가능하다!)
(int a, int b) -> a > b ? a : b
여기서 남아있던 매개변수의 타입인 int형식은 추론 가능한 친구이기 때문에 생략이 가능하다.
(a, b) -> a > b ? a : b
요렇게.
람다식 작성의 주의사항
1. 매개변수가 하나일 경우 괄호 생략가능(타입이 없을때만)
(a) -> a * a
는
a -> a * a
로 변경 가능하다.
하지만
(int a) -> a * a
처럼 매개변수에 타입이 있는 경우는
int a -> a * a // 불가능
이렇게 바꾸는게 불가능하다.
대부분 매개변수의 타입은 생략 가능한데, 이게 불가능한 경우가 있으므로 기억해 두어야 한다.
2. 블록 안의 문장이 하나뿐일때, 괄호 생략가능(끝에 ;
안붙임)
(int i) -> {
System.out.println(i);
}
을
(int i) -> System.out.println(i)
로 생략 가능하다.
단, 하나뿐인 문장이 return문이면 괄호 생략 불가
(int a, int b) -> {return a > b ? a : b;} // OK
(int a, int b -> return a > b ? a : b // ERROR
-> 근데 어차피 return을 걍 생략한다.
람다식
- 람다식은 익명 함수가 아니라 익명 객체이다.
- 사실 자바에서는 메서드가 따로 존재할수가 없다... 그래서 익명 객체임.
- 이런 익명 객체를 다루기 위한 참조변수가 필요하다.
- 이것은 함수형 인터페이스를 통해 해결이 가능하다.
- 이런 익명 객체를 다루기 위한 참조변수가 필요하다.
- 사실 자바에서는 메서드가 따로 존재할수가 없다... 그래서 익명 객체임.
반응형
'이론 정리 > java' 카테고리의 다른 글
lambda에서의 지역 변수 final, effectively final (1) | 2023.01.09 |
---|---|
메서드 참조 (0) | 2023.01.08 |
함수형 인터페이스 (1) | 2023.01.07 |
logging - java에서 System.out.println()을 왜 사용하면 안될까?? (0) | 2023.01.06 |
java 깊은복사 vs 얕은복사(feat.clone) (0) | 2023.01.02 |