본문 바로가기

하../java

ch14 람다식 작성하기

람다식(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