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));
    }
}