[기술 정리] 람다식(Lambda Expression)

lhs's avatar
Nov 20, 2024
[기술 정리] 람다식(Lambda Expression)
💡
간결한 문법으로 함수형 프로그래밍을 구현할 수 있도록 지원하는 익명 함수 표현식
 

1. 람다식이란

익명 함수를 표현하는 간결한 방법으로, 함수형 인터페이스를 구현할 때 사용된다. Java 8에서 도입되어, 매개변수와 반환값을 갖는 짧은 함수를 함수형 인터페이스의 인스턴스로 간단히 구현할 수 있게 해준다. 람다는 코드의 가독성을 높이고, 함수형 프로그래밍 스타일을 지원한다.

2. 람다식 구조

  • 람다식은 두 가지 형태가 있다.
  • 단일 표현식 람다
    • (매개변수) -> 내용의 형태를 가진다.
    • 매개변수가 없을 경우 괄호를 비워도 된다.
    • 매개변수가 하나일 때 괄호를 샹략할 수 있다.
    • 반환값이 필요하면 자동으로 반환된다.
  • 블록 람다
    • (매개변수) -> { 내용 }의 형태를 가진다.
    • 매개변수가 없을 경우 괄호를 비워도 된다.
    • 매개변수가 하나일 때 괄호를 샹략할 수 있다.
    • 단일 표현식 형태와 차이점은 중괄호를 사용하고 여러 줄의 코드도 작성할 수 있다.
    • 반환값이 필요하면 return을 명시해야 한다.

3. 함수형 인터페이스

  • 함수형 인터페이스는 하나의 추상 메서드만을 가진다.
  • default 메서드나 static 메서드는 추가할 수 있다.
  • @FunctionalInterface 어노테이션을 사용하여 함수형 인터페이스임을 명시할 수 있다.
@FunctionalInterface public interface MyConsumer<T> { void consume(T data); }
  • 입력만 받고 출력이 없는 연산을 수행하는 함수형 인터페이스
@FunctionalInterface public interface MySupplier<T> { T get(); }
  • 입력 없이 값을 반환하는 함수형 인터페이스
@FunctionalInterface public interface MyFunction<T, R> { R apply(T t); }
  • 입력을 받아서 결과를 반환하는 함수형 인터페이스
@FunctionalInterface public interface MyPredicate<T> { boolean apply(T t); }
  • 입력을 받아 논리값을 반환하는 함수형 인터페이스

4. 람다식 사용

public class App { public static void main(String[] args) { MyConsumer<Integer> r1 = (data) -> { System.out.println("소비할 데이터: " + data); }; r1.consume(1); MySupplier<String> r2 = () -> { return "good"; }; MySupplier<String> r3 = () -> "good"; String msg = r3.get(); System.out.println(msg); MyFunction<Integer, String> r4 = (data)->{ return "data:" + data; }; MyPredicate<Integer> r5 = x -> x > 5; boolean msg2 = r5.apply(10); System.out.println(msg2); } }
  • MyConsumer<Integer> r1
    • 블록 람다를 사용하여 출력을 정의했다.
    • 정수 값을 받아 해당 내용을 출력한다.
  • MySupplier<String> r2
    • 블록 람다를 사용하여 문자열을 반환했다.
    • 입력값 없이 “good”을 반환한다.
  • MySupplier<String> r3
    • 단일 표현식 람다를 사용하여 자동반환을 통해 문자열을 반환했다.
    • 입력값 없이 "good"을 반환한다.
  • MyFunction<Integer, String> r4
    • 블록 람다를 사용하여 정수형 값을 받아 문자열로 반환했다.
    • 정수 값을 받아 “data: ” 뒤에 정수값을 추가하여 반환한다.
  • MyPredicate<Integer> r5
    • 단일 표현식 람다를 사용하여 논리값을 반환했다.
    • 입력값이 5보다 크면 true를 반환한다.
Share article

LHS's Study Space