1. 람다식
자바가 등장한이후로 큰변화가 두번있었는데, 첫번째는 JDK 1.5부터 추가된 지네릭스와,
두번째는 JDK 1.8부터 추가된 람다식의 등장이다
자바는 람다식의 도입으로 객체지향적언어 + 함수형 언어가 되었다.
1.1 람다식이란?
간단히 말해서 메서들르 하나의 식'(expression)'으로 표현한것이다.
함수를 간략하면서, 명확한 식으로 표현할수 있게 해준다.
메서드를 람다식으로 표현하면, 메서드의 이름과 반환값이 없어지므로 람다식을 '익명함수'라고도 한다
*메서드와 함수의 차이
-둘다 개념은 동일하나, 메서드는 특정 클래스에 반드시 속해야한다는 제약이 있고 함수는 아님
1.2 람다식 작성하기
'익명함수'답게 메서드에서 이름과,반환타입을 제거하고 매개변수선언부와 몸통{ } 사이에 ' -> '를 추가
1) 반환값이 있는 메서드의 경우, return문 대신 '식(expression)'으로 대체가능.
(식의 결과가 자동반환. 대표적으로 3항연산자가 있다. 세미콜론 X)
1
2
3
4
5
6
|
int max(int a, int b){
return a > b ? a : b;
}
------------------람다식
(a,b) -> a > b ? a : b
|
cs |
2) 매개변수의 타입은 추론이 가능한경우 생략가능( 대부분생략가능하다.)
1
2
3
4
5
6
|
void printVar(String name, int i){
System.out.println(name + "=" + i);
}
----------람다식
(name,i) -> {System.out.println(name +"="+i);}
|
cs |
3) 선언된 매개변수가 하나뿐인경우 괄호 생략가능
1
2
3
4
5
6
7
|
int square(int x){
return x * x;
}
--------람다식
x -> x * x
|
cs |
4) 마찬가지로 괄호 { } 안에 문장이 하나일때 괄호 생략가능 ( 세미콜론 X)
1
2
3
4
5
6
|
int roll(){
return (int) (Math.random() * 6 );
}
-------람다식
() -> (int)(Math.random() * 6)
|
cs |
5) 그러나, 괄호안에 문장이 return문일경우 생략불가.
1
2
3
4
5
6
7
8
9
10
11
12
|
int sumArr(int[] arr){
int sum = 0;
for(int i : arr) sum += i;
return sum;
}
-------람다식
(int[] arr) -> {
int sum = 0;
for(int i : arr) sum += i;
return sum;
}
|
cs |
1.3 함수형인터페이스( Function InterFace)
- 참조변수가 있어야 객체의 메서드를 호출할수 있다.( 여기서 궁금한점은 참조변수의 타입을 뭘로할까?)
참조형이니, 클래스 또는 인터페이스가 가능하다 (* 람다식과 동등한 메서드가 정의되어있어야함)
참조타입은, 인터페이스를 통해 람다식을 다루기도함 (이걸 함수형 인터페이스라고한다.)
함수형 인터페이스 안에는 오직 하나의 추상메서드만 정의되어 있어야한다.( 그래야 람다와 메서드 1:1매칭)
@FunctionInterFace를 붙이면, 컴파일러가 함수형 인터페이스를 잘 정의했는지 확인해준다.
람다와 스트림은 필요할떄 공부해서 다시 정리를 해놓겠다.
'읽은 책 정리 > 자바의정석 3판' 카테고리의 다른 글
[Java] Chapter12 지네릭스,열거형,애너테이션 (0) | 2021.03.30 |
---|---|
[Java] Chapter11 컬렉션 프레임워크 (0) | 2021.03.28 |
[Java] Chapter10 날짜와 시간 & 형식화 (0) | 2021.03.28 |
[Java] Chapter09 Java.Iang 패키지와 유용한클래스 (0) | 2021.03.22 |
[Java] Chapter08 예외처리 (0) | 2021.03.22 |