Search
👜

람다식

태그
java
람다식을 알아보기 앞서 JDK1.8 부터 자바는 함수형 언어 포함(OOP 언어 + 함수형 언어)
빅데이터가 뜨면서 많은 양의 데이터를 처리하기 위해 함수형 언어가 필요하게 됨

람다식이란

함수(메서드)를 간단한 ‘식(expression)’으로 표현하는 방법
int max(int a, int b) { return a>b?a:b; }
SQL
복사
이러한 함수가
(a,b) -> a>b?a:b
SQL
복사
이렇게 간단하게 표현 됨
익명 함수 (이름이 없는 함수, anonymous function)
함수와 메서드의 차이
근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어
함수는 클래스에 독립적, 메서드는 클래스에 종속적

람다식 작성하기

1.
메서드의 이름과 반환타입을 제거하고 ‘→’를 블록 {} 앞에 추가
2.
반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(; 안붙임)
3.
매개변수의 타입이 추론 가능하면 생략가능(대부분의 경우 생략 가능)

주의사항

1.
매개변수가 하나인 경우, 괄호() 생략 가능(타입이 없을 때만)
2.
블록 안의 문장이 하나뿐일 때, 괄호{} 생략 가능(끝에 ; 안붙임)

람다식은 익명 함수? 익명 객체!

자바에서 람다식은 익명 함수가 아니라 익명 객체
(a, b) -> a> b ? a: b
Java
복사
이게 원래는
new Object() { int max(int a, int b) { return a>b?a:b; } }
Java
복사
이런 식으로 객체의 선언과 생성을 동시에 하는 코드임
람다식(익명 객체)을 다루기 위한 참조변수가 필요. 참조변수의 타입은?
Object object = new Object() { int max(int a, int b) { return a>b?a:b; } }
Java
복사
obj.max(3,5)
Java
복사
하지만 obj.max하면 오류 발생. Object에는 max 메서드가 없으니깐.
→ 해결 방법은 함수형 인터페이스를 사용하는 것.
MyFunction f = new MyFunction() { public int max(int a, int b) { return a>b?a:b; } }
Java
복사
int value = f.max(3,5)
Java
복사
함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음
MyFunction f = (a,b) -> a>b?a:b;
Java
복사
함수형 인터페이스 타입의 매개변수
MyFunction f = () -> System.out.println("myMethod()"); aMethod(f); //aMethod라는 메서드의 매개변수로 람다식 객체를 넣음 aMethod(() -> System.out.println("myMethod()")) // 이런 방식도 가능
Java
복사
함수형 인터페이스 타입의 반환 타입