[JAVA] 람다식(Lamda expression)과 함수형 인터페이스(Functional Interface)

DANI·2023년 12월 13일
0

JAVA를 공부해보자

목록 보기
26/29
post-thumbnail

📕 람다식이란?

람다식은 메서드를 간략하고 명확하게 표현할 수 있게 해주며, 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, '익명 함수'라고도 한다.

메서드를 하나의 식(expression)으로 표현한 것



📝 함수형 인터페이스(Functional Interface)

람다식은 메서드 이름이 없고 메서드를 실행하는데 필요한 매개변수와 매개변수를 활용한 실행코드를 구현하는 것으로 람다식을 구현하기 위해서는 함수형 인터페이스를 만들고 인터페이스 내부에 추상메서드가 단 하나만 존재해야 한다.

@FunctionalInterface 애노테이션 추가

💡 람다식 문법


  1. 매개변수 자료형 생략 가능(타입이 있을 경우 괄호와 함께 사용)
  2. 매개변수가 하나일 경우 괄호 생략
  3. 매개변수가 2개 이상인 경우 괄호 생략 X
  4. 중괄호 안의 문장이 한 문장인 경우 중괄호 생략가능
  5. return 생략 가능


📝 메서드 참조

람다식이 하나의 메서드만 호출하는 경우에는 메서드 참조(method reference)라는 방법으로 람다식을 간결하게 할 수 있다.
하나의 메서드만 호출하는 람다식은 클래스이름::메서드이름 또는 참조변수::메서드이름으로 바꿀 수 있다.

Function<String, Integer> f = (String s) -> Integer.parseInt(s);

Function<String, Integer> f = Integer::parseInt; // 메서드 참조
BiFunction<String, String, Boolean> f = (s1, s2) -> s1.equals(s2);

BiFunction<String, String, Boolean> f = String::equals; // 메서드 참조

📝 생성자의 메서드 참조

Supplier<MyClass> s = () -> new MyClass(); // 람다식
Supplier<MyClass> s = MyClass::new; // 메서드 참조
BiFunction<Integer, String, MyClass> bf = (i, s) -> new MyClass(i, s);
BiFunction<Integer, String, MyClass> bf2 = MyClass::new;  // 메서드 참조
Function<Integer, int[]> f = x -> new int[x];
Function<Integer, int[]> f2 = int[]::new;


📝 java.util.function 패키지


함수형 인터페이스를 정의해 둔 패키지

1) 매개변수가 없고 반환값이 있는 형태

  • T supplier() : T get()

2) 매개변수가 1개, 반환값은 없음

  • Consumer : void accept(T t)

3) 매개변수가 1개, 반환값 있음

  • Function : R apply(T t)

4) 매개변수가 1개, 반환값 boolean

  • Predicate : boolean test(T t)

0개의 댓글