람다식
- Java SE 8에서 새로 도입
- 함수를 하나의 식(expression)으로 표현한 것
- 익명 함수(Anonymous functions)를 지칭하는 용어
- 익명함수(Anonymous Function)란 함수의 이름이 없는 함수로, 익명함수들은 모두 일급 객체
- 기존의 불필요한 코드를 최소화하고 가독성을 높인다.
기존 메소드 생성
반환티입 메소드명 (매개변수, ...) {
실행문
}
int multiply(int x, int y){
return x * y;
}
(x,y) -> x * y
람다식 생성
(매개변수, ... ) -> { 실행문 ... }
(x,y) -> x * y
람다식 장단점
장점
- 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현
- 지연연산 수행 - 람다는 지연연상을 수행 함으로써 불필요한 연산을 최소화
- 병렬처리 가능 - 멀티쓰레디를 활용하여 병렬처리를 사용
단점
- 람다식의 호출이 까다롭습니다
- 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어집니다.
- 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있습니다.
람다식 표현법
// 1. 기본형
(int x) -> {System,out.println(x);}
// 2. 매개 변수의 타입을 추론할수 있는 경우 -> 타입 생략 가능
(x) -> {System,out.println(x);}
// 3. 매개 변수나 실행문이 하나라면 소괄호(), 중광호() 생략 가능, 이 떄 세미클론 ;은 붙이지 않는다
x -> System,out.println(x)
// 4. 매개 변수가 없을 경우에는 빈 소괄호() 사용, 괄호생략 불가
() -> {System,out.println(x);}
// 5. 함수식이 하나의 return문으로 이루어진 경우, 중괄호{} 생략 불가
(x,y) -> {return x + y;}
// 6. return문 대신 표현식만 사용 가능, 리턴 값은 표현식의 결과 값이 된다. 이 떄 세미클론 ;은 붙이지 않는다
(x,y) -> x+y
함수형 인터페이스
- 하나의 추상 메소드만 선언된 인터페이스
- @FunctionalInterface 어노테이션
- 직접 함수형 인터페이스를 작성할 때 사용
- 해당 인터페이스에 2개 이상의 추상 메소드가 선언되면 컴파일 에러 발생
//구현해야 할 메소드가 한개이므로 Functional Interface
@FunctionallInterface
public interface FunInterface{
public void exMethod1();
}
//구현해야 할 메소드가 두개이므로 Functional Interface가 아니다. (컴파일 에러 발생)
@FunctionallInterface
public interface FunInterface{
public void exMethod1();
public void exMethod2();
}
Java에서 제공하는 함수형 인터페이스
함수형 인터페이스의 대표적 종류
함수형 인터페이스 | 추상 메소드 | 설명 |
Consumer(소비) | void accept(T t); | 입력 값은 있고 리턴 값은 없다 |
Supplier(공급) | T get(); | 입력 값은 없고 리턴 값은 있다 |
Function(타입 변환) | R apply(T t); | 입력 값과 리턴 값 둘 다 있다 입력 값을 리턴 타입으로 타입 변환하여 돌려준다 |
Operator(연산) | T apply(T t); | 입력 값과 리턴 값 둘 다 있다 입력 값을 연산하고 그결과 값을 돌려준다 |
Predicate(참과 거짓) | boolean test(T t) | 입력 값과 리턴 값 둘 다 있다 입력 값을 조사해 불리언 값으로 돌려준다 |
그외 다양한 Interface 목록
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
참고
https://mangkyu.tistory.com/113
[Java] 람다식(Lambda Expression)과 함수형 인터페이스(Functional Interface) - (2/5)
1. 람다식(Lambda Expression) 이란? Stream 연산들은 매개변수로 함수형 인터페이스(Functional Interface)를 받도록 되어있다. 그리고 람다식은 반환값으로 함수형 인터페이스를 반환하고 있다. 그렇기 때문
mangkyu.tistory.com
[JAVA] 람다식(Lambda)의 개념 및 사용법
람다함수란? 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어입니다. 현재 사용되고 있는 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 람
khj93.tistory.com
오정원. 『꼭 알아야 하는 Java Programming』. 혜지원, 2019. Chap14
'JAVA' 카테고리의 다른 글
JAVA 버전 여러 개 전환하여 사용하는 법 (0) | 2023.02.03 |
---|---|
Java - 컬렉션 프레임워크(Collections Framework) (0) | 2022.11.03 |
2021-08-13 오후 (File) (0) | 2021.08.13 |
2021-08-13 오전 (File) (0) | 2021.08.13 |
2021-08-11(DateTime) (0) | 2021.08.11 |