Chaper 14. 람다식

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