12/27(금) TIL

OneTwo·2024년 12월 27일

TIL

목록 보기
4/5

람다 표현식

람다 표현식은 Java 8 에 추가된 기능으로
매개변수를 받아서 값을 반환하는 짧은 코드 블록이다.
람다 표현식을 사용하면 간결하고 가독성 높은 코드를 작성할 수 있으며,
함수형 프로그래밍의 핵심 요소로 , 함수형 인터페이스와 함께 사용된다.

람다의 기본적인 형태

  1. 매개변수가 없는 람다식
() -> {표현식

Runnable r = () -> { System.out.println("Hello, Lambda!"); };

  1. 하나의 매개변수가 있는 람다식
(매개변수) -> {표현식}

Consumer<String> printer = message -> System.out.println(message);

  1. 여러개의 매개변수가 있는 람다식
(매개변수1, 매개변수2) -> {표현식}

BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;

  1. 반환값이 있는 경우
(매개변수) -> { return value;}

// return 생략 가능
Function<Integer, Integer> square = x -> x * x;

  1. 단일식의 경우 중괄호 생략 가능
Predicate<Integer> isPositive = n -> n > 0;

예시

  1. 리스트의 요소 출력
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(5);
        numbers.add(2);
        numbers.add(3);

        numbers.forEach(n -> System.out.println(n));
    }
}
  1. 두 수의 합 계산
import java.util.function.BiFunction;

public class Main {
    public static void main(String[] args) {
        BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
        System.out.println(add.apply(5, 10)); // 출력: 15
    }
}
  1. 조건에 따른 필터링
import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        Predicate<Integer> isEven = n -> n % 2 == 0;

        System.out.println(isEven.test(4)); // true
        System.out.println(isEven.test(5)); // false
    }
}



반환값과 타입 추론

  1. 타입 추론
  • 자바 컴파일러는 람다 표현식의 컨텍스트를 참조하여 매개변수와 반환값의 타입을 추론한다.
Function<Integer, Integer> square = x -> x * x; // 매개변수 x의 타입은 Integer로 추론
  1. 반환값:
  • 반환값이 있는 경우 , return 키워드는 선택 사항.
  • 단일 문장이라면 return과 중괄호 {} 생략 가능하다.
// 반환값 있음 (return 생략)
Function<String, Integer> length = str -> str.length();

// 반환값 있음 (return 명시)
Function<Integer, String> evenOdd = n -> {
    if (n % 2 == 0) return "Even";
    else return "Odd";
};



함수형 인터페이스란?

  • 단 하나의 추상 메서드를 가지는 인터페이스
  • 자바에서 람다 표현식은 반드시 함수형 인터페이스와 함께 사용된다.
  • @FunctionalInterface 어노테이션을 사용하여 명시 가능
@FunctionalInterface
interface MyFunc {
    void apply(int x, int y); // 단일 추상 메서드
}

public class Main {
    public static void main(String[] args) {
        // 람다 표현식으로 함수형 인터페이스 구현
        MyFunc add = (a, b) -> { System.out.println(a + b); };
        
        // apply 메서드 호출
        add.apply(5, 10); // 출력: 15
    }
}

자바 내장 함수형 인터페이스
인터페이스설명메서드예시 람다 형태
Consumer<T>매개변수를 받아 소비(출력 등)accept(T t)(n) -> System.out.println(n)
Function<T, R>입력값을 받아 반환값을 생성apply(T t)(x) -> x * x
Predicate<T>입력값을 평가(참/거짓 반환)test(T t)(x) -> x > 10
Supplier<T>값을 반환get()() -> "Hello"
profile
매일 성장하는 개발자

0개의 댓글