Java의 Lambda Expression(람다식)
- 프로그래밍 언어/JAVA
- 2021. 10. 22.
함수형 프로그래밍(Functional Programming)
- 함수형 프로그래밍은 함수를 구현하고, 매개변수만으로 함수 내부에서만 수행되는 프로그래밍 기법이다. 함수는 외부의 변수들을 사용하지 않아, 외부에 영향을 미치지 않는다. 즉, 외부 영향이 줄어들기 때문에 안정성이 좋다.
- 함수형 프로그래밍은 매개변수를 기반으로만 수행되기 때문에 동시에 여러 함수를 사용할 수 있다. 즉, 병렬 처리가 가능하다는 이점이 있다.
Lambda Expression(람다식)
- 람다식은 익명 함수다.
- 람다식은 매개 변수와 매개 변수를 이용한 실행문으로 작성이 가능하며, 코드는 간결해지나 가독성이 떨어진다.
- 람다식은 람다식을 위한 인터페이스가 필요하며, 인터페이스 내에는 단 하나의 메서드만 존재해야한다. 람다식은 이름이 없기 때문에, 두 개 이상의 메서드가 있을 경우 어떤 메서드를 구현한 것인지 모르기 때문이다.
- 람다식을 위한 인터페이스에는 @FunctionalInterface 애노테이션을 달아준다.
//람다식 표현
Add addL = (int x1, int x2) -> {return x1 + x2;}
람다식의 표현은 위처럼 작성할 수 있다. 람다식을 위한 인터페이스의 자료형을 만든 후, 그 자료형에 람다식을 저장한다. 람다식을 저장한 후에, 람다식 인스턴스에 값을 대입하면 함수에 의한 결과를 얻을 수 있다. 아래는 람다식에 대한 예시이다.
함수형 프로그래밍을 위한 람다식 1.
@FunctionalInterface
interface Add{
public int add(int x1, int x2);
//람다식 인터페이스에 두 개 이상의 메서드가 있으면 안됨.
//public int sub(int x1, int x2);
}
public class LambdaTest {
public static void main(String[] args) {
Add addL = (x1, x2) -> {return x1+x2;};
System.out.println(addL.add(2, 5));
}
}
람다식과 객체지향 비교
package ch05;
public class StringTest {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "cdef";
StringConcatFun str1 = new StringConcatFun();
System.out.println(str1.stringPlus(s1, s2));
StringConcat str2 = new StringConcat() {
@Override
public void doing(String s1, String s2) {
System.out.println(s1 + " " + s2) ;
}
};
str2.doing(s1, s2);
StringConcat str3 = (s,v) -> System.out.println(s + " " + v);
str3.doing(s1, s2);
}
}
객채지향은 필요한 클래스 내에 메서드를 구현해둔다. 그리고 그 메서드 사용을 위해 인스턴스를 만들고, 인스턴스에 매개변수를 전달해서 원하는 결과를 얻는다.
함수형 프로그래밍을 위한 람다식은 Interface를 익명 내부 클래스가 만들어지고, 내부 클래스에 있는 Override 메서드에 람다식이 들어가게 되고, 그 익명 내부 클래스의 인스턴스에 의해 연산이 실행된다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
자바의 Object Class (0) | 2021.10.23 |
---|---|
Java의 여러 내부 클래스 정의, 유형 (0) | 2021.10.23 |
Java의 Reduce 정의 (0) | 2021.10.22 |
자바 기초 정리 : 상속, 인터페이스 (0) | 2021.10.21 |
자바 강의 듣고 정리 (0) | 2021.10.19 |