Java&Web

[Java] 람다식과 함수형 인터페이스(1)

프로그래민 2021. 2. 27. 15:02
반응형

람다식(Lambda Experssion)이란?

람다(Lambda)는 JDK 1.8부터 추가된 것으로, 람다의 도입으로 인해 자바는 객체지향언어이지만 함수형언어의 특징까지 가지게 되었다. 즉, 함수형 프로그래밍으로써 람다식은 메소드를 간략하면서도 명확한 하나의 식으로써 표현한 것이다. 메소드를 람다식으로 표현하면 메소드의 이름과 반환값이 없어지게되므로 람다식을 익명함수(anonymous function)라고도 한다.

 

람다식의 작성법

람다식은 익명함수답게 메소드에서 이름과 반환타입을 제거하고 매개변수 선언부와 몸통{ } 사이에 -> 를 추가하여 작성한다. 또한, 람다식에서 매개변수의 타입, 매겨변수의 괄호, 몸통 괄호, return, 세미클론을 경우에 따라 생략을 할 수 도 있다.

기본식
반환타입 메소드이름 (매개변수 선언) {
     문장들
}

람다식
반환타입 메소드이름 (매개변수 선언) -> {
    문장들
}

람다식 예시
int max (int a, int b) -> {
     return a > b? a : b ; 
}

 

람다식의 장점

  • 메소드의 구현을 간결하게 하여 가독성을 높인다.
  • 불필요한 루프문 제거와 함수를 재활용할 수 있는 여지가 커진다.
  • 함수형 프로그래밍을 바탕으로 병렬 프로그래밍이 가능하다.
  • 코드가 사용될 때까지 지연시켰다가 사용할 때 동작하는 지연 실행(Lazy Evaluation)을 지원 하여 스레드 자원을 낭비하지 않을 수 있다.

 

람다식의 단점

  • 단순하게 모든 원소를 전부 순회하는 경우 람다식이 느릴 수 있다.
  • 디버깅시에 함수의 콜스택 추적이 다소 여렵다.
  • 람다식의 남발은 코드를 이해하기 어렵게 한다.

 

함수형 인터페이스란?

함수형 인터페이스(Functional Interface)란 람다식을 다루기 위한 단 하나의 추상 메소드를 가지고 있는 인터페이스이다. 정의를 함에 있어 @FunctionalInterface 어노테이션을 사용하여 명시적으로 표현해줄 수 있고, 만일 두개 이상의 추상 메소드를 가진다면 컴파일 에러가 발생한다.

@FunctionalInterface
interface 인터페이스명 {
     반환타입 함수명 (매개변수);      // public abstract가 생략
}

Java에서 기본적으로 제공하는 함수형 인터페이스로써 다음과 같은 것들이 있다.

  • Runnable
  • Supplier
  • Consumer
  • Function<T, R>
  • Predicate

이 외에도 java.util.function 패키지에 다양한 것들이 존재한다.

 

람다식과 함수형 인터페이스 예제

MyFunctionInterface의 구현

 

결과

 

출처
Java의 정석 : 3rd Edition - 도우출판, 남궁성 저
codechacha.com/ko/java8-functional-interface/
zorba91.tistory.com/278
dinfree.com/blog/2019/03/27/javafp-1.html
반응형