람다와 함수형 인터페이스

김국민·2025년 3월 22일
0

JAVA

목록 보기
19/21

람다표현식이란?

자바의 람다식(Lambda Expression)은 함수형 프로그래밍 개념을 도입하여 자바의 생산성을 높이고, 코드의 가독성과 간결성을 개선하기 위해 등장했다.
람다식은 자바 8에서 도입되었다.
간단히 말해 자바의 메소드를 간결한 함수 식으로 표현한 것이다.

예시코드

//일반 메서드
int add(int x, int y) {
    return x + y;
}
//람다식으로 변경
(x, y) -> x + y;
타입이 없는데?

타입을 생략을 해도 컴파일러가 에러를 띄우지않는 이유는, 컴파일러 나름대로 생략된 타입 위치를 추론하여 동작하게 해주기 때문이다.


자바 함수형 인터페이스란?

함수형 인터페이스는 단 하나의 추상 메소드만 포함하는 인터페이스다

함수형 인터페이스는 여러개의 default 메소드나 static 메소드를 가질 수 있지만 추상 메서드는 하나여야 한다
람다 표현식(lambda expressions)과 메소드 참조(method references)를 사용하여 함수형 인터페이스의 인스턴스를 표현할 수 있다.

자주 사용되는 함수형 인터페이스
ex ) Runnable, ActionLisener, Comparator

@FunctionalInterface

@FunctionalInterface 애너테이션을 사용하여 함수형 인터페이스를 알려준다.
함수형 인터페이스는 람다 표현식으로 인스턴스를 생성할 수 있고 추상메서드가 1개가 아닐경우 컴파일에러를 낸다

예시 코드

@FunctionalInterface
interface FunctionalExample{

    void functionalMethod();
}

//
FunctionalExample func = () -> {
            System.out.println("헬로");
        };
func.functionalMethod();

함수형 인터페이스 표준 API

자바에서는 미리 함수형 인터페이스를 정의해두고 제공하고 있는데, 이를 함수형 인터페이스 표준 API라고 한다.

함수형 인터페이스 표준 API는 java.util.function 패키지로 제공된다

Java 8에서는 다양한 상황에 크게 네가지의 함수형 인터페이스 종류가 존재한다

  • Consumer
    • 하나의 인자를 받고 값을 반환하지 않는 함수형 인터페이스다
* Consumer<Integer> consumer = (value) -> System.out.println(value);
  • Predicate
    • Predicate 인터페이스는 하나의 인자를 받아서 boolean 값을 반환하는 함수형 인터페이스
* Predicate<Integer> isEven = (x) -> x % 2 == 0;  // 짝수인지 확인
* System.out.println(isEven.test(4));  // true 출력
  • Function
    • Function은 자바에서 하나의 인자만 받으며, 요구되는 처리를 거친 후 값을 반환하는 함수형 인터페이스
* Function<Integer, Integer> function = (value) -> value * value;
* Integer num  =  function.apply(2);
  •  Supplier
    • 어떠한 인자도 받지 않으며 하나 하나의 값을 리턴한다
    • Supplier supplier = () -> “”;
    • String str = Supplier.get()

  • Java의 Functional interface는 무엇인가요?

    함수형 인터페이스는 단 하나의 추상메서드만 포함하는 인터페이스로 람다식과 메서드 참조를 사용해 함수형 인터페이스를 구현할 수 있다

  • Java Lambda는 왜 만들어졌고, 어느 때 주로 사용할까요?

    자바의 람다식(Lambda Expression)은 함수형 프로그래밍 개념을 도입하여 자바의 생산성을 높이고, 코드의 가독성과 간결성을 개선하기 위해 등장했다.
    람다식은 자바 8에서 도입되었다.
    함수형 인터페이스를 구현할 때 사용한다

profile
개발지망생

0개의 댓글