JAVA/Java2021-2
함수형 프로그래밍 람다식(lambda expression)
RoarinGom
2021. 10. 11. 16:56
함수형 프로그래밍(람다식) functional programming (자바8 부터 제공)
: 함수를 구현하고 함수를 호출함으로써 함수를 호출할 때 매개변수를 이용할 때,
매개변수를 기반으로 함수가 수행이 된다(이 함수는 외부에 있는 변수는 사용을 하지않는다.)
함수가 외부에 있는 변수를 사용하면 함수가 수행하면서 외부에 side effect을 일으켜 버그를 발생시킬 수 있는데,
매개변수를 받아 이 변수를 기반으로 내부에서만 수행되기 때문에 외부에 영향을 주지 않는다.
So, 동시에 여러 함수를 호출 시 문제 발생되지않음. 내부적으로만 병렬처리 되기 때문에.
장점 : 소스가 간결해짐
단점 : 가독성이 떨어짐
실습
1. 함수형 인터페이스 생성(메서드는 하나만 등록되어있어야 사용가능하다)
2. main()함수에서 함수형 인터페이스를 호출하면서 람다식 이용
람다식 문법
1. 익명함수(함수이름이 없다)
2. (매개변수) -> {실행문;}
원래 함수
int add(int x, int y){
return x+y;
}
-람다식으로 변형
(int x, int y)->{return x+y;}
매개변수가 1개일 때 ()괄호와 데이터타입 생략 가능,
2개 이상인 경우는 ()괄호는 생략할 수 없음(데이터 타입은 생략가능한듯 가독성을 위해 써주자?)
str->{System.out.println(str);}
실행문이 한 줄일 경우 {}중괄호 생략 가능 but, return 값이 있을 경우에는 {}중괄호 생략 못함.
str->System.out.println(str);
실행문이 한문장의 반환문인 경우에 return과 중괄호 모두 생략
(x,y)->x+y;
str->str.length;
실습
1.Add interface하나 만들기
package Basic_Grammar.chap6.ch02lambda.Test01;
public interface Add {
int add(int x,int y);
}
2.lamdba식 이용
package Basic_Grammar.chap6.ch02lambda.Test01;
public class AddTest {
public static void main(String[] args) {
Add a=(x,y)->{return x+y;};
System.out.println(a.add(2,3));
}
}