[Java] 람다식(Lambda) ?
Lambda?
함수적 프로그래밍 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어다. 함수적 프로그래밍을 쉽게 지원하기 위해 자바 8부터 람다식(Lambda Expression)을 지원하고 있다. 람다식은 (매개변수) -> {실행코드} 형식으로 작성된다.
익명함수란??
함수의 이름이 없는 함수이다. 익명함수는 일급객체라(first-class object)는 특징을 가진다. 컴퓨터 프로그래밍 언어 디자인에서, 일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.
reference : wikipedia(일급객체)
장단점
장점
- 코드를 간결하게 만들 수 있다.
- 코드가 간결하고 식에 개발자의 의도가 명확히 드러나므로 가독성이 향상된다.
- 함수를 만드는 과정없이 한번에 처리할 수 있기에 시간 절약 가능
- 병렬처리가능
단점
- 익명함수는 재사용이 불가능하다.
- 디버깅이 다소 까다롭다.
- 람다를 남발하면 코드가 지저분해질 수 있다.
람다식 호출하기
람다식은 함수형 인터페이스를 구현한 객체이다. 함수형 인터페이스에 선언된 추상 메소드를 구현하는 방식으로 작성된다.
interface Func {
int calc(int a, int b);
}
//추상메소드 calc() 한개만 가진 함수형 인터페이스 Func 이다.
람다식으로 호출
Func f = (int a, int b) -> { return a + b; }
//OR
Func f = (a, b) -> { return a + b; }
Example
interface Func{
int calc(int a, int b);
}
public class Example1 {
public static void main(String[] args){
Func add = (a,b) -> { return a+b;}
Func minus = (a,b) -> a-b;
System.out.println(add.calc(1,2));
System.out.println(minus.cals(5,1));
}
}
interface Func{
int calc(int a);
}
public class Example2 {
public static void main(String[] args){
Func multi = a -> a * a
System.out.println(multi.calc(3));
}
}
interface Func{
void print();
}
public class Example3 {
public static void main(String[] args){
Func f = () -> { System.out.println("Lambda Expression"); }
f.print();
f = () -> System.out.println("Another Lambda Expresssion");
f.print();
}
}
메소드의 매개변수로 람다식 전달
interface Func{
int calc(int a, int b);
}
public class Example4 {
public static void main(String[] args){
print(3,4, (a,b)->a+b);
}
public void print(int a, int b, Func f){
System.out.print(f.clac(a,b));
}
}
@FunctionalInterface Annotation!
함수형 인터페이스 앞에 @FunctionalInterface 어노테이션을 사용해서, 컴파일러에게 함수형 인터페이스의 작성을 알릴 수 있다. 컴파일러에게 인터페이스가 추상 메소드가 1개만 있는 함수형 인터페이스인지 확인하도록 하여, 잘못된 인터페이스 작성을 막는 장점이 있다.
@FunctionalInterface
interface Func{ // 컴파일 오류 발생
int calc(int a);
void print();
}
Author And Source
이 문제에 관하여([Java] 람다식(Lambda) ?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@brianhwang/Java-람다식Lambda저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)