PHpullh
학습 라이브러리/Java/람다 표현식 심화

JAVA · 기초 문법

람다 표현식 심화

람다의 다양한 형태와 클로저, 효과적 final 변수를 이해합니다.

기초 문법중급lambda람다effectively-finalComparator

핵심 설명

람다의 다양한 형태와 클로저, 효과적 final 변수를 이해합니다.

Java code

import java.util.*;
import java.util.function.*;

public class LambdaAdvanced {
    public static void main(String[] args) {
        // 다양한 형태
        Runnable r = () -> System.out.println("실행");
        Consumer<String> c = s -> System.out.println(s);
        BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
        Comparator<String> comp = (a, b) -> a.length() - b.length();

        // 여러 줄 람다
        Function<List<Integer>, Integer> sumFn = list -> {
            int sum = 0;
            for (int n : list) sum += n;
            return sum;
        };

        // effectively final 변수 캡처
        String prefix = "결과: ";  // effectively final
        Function<Integer, String> fmt = n -> prefix + n;

        // 변수 수정 우회 (배열/AtomicInteger)
        int[] counter = {0};
        List.of(1, 2, 3).forEach(n -> counter[0] += n);
        System.out.println(counter[0]); // 6

        // Comparator 체이닝
        List<String> names = new ArrayList<>(
            List.of("Charlie", "Bob", "Alice", "Dave"));
        names.sort(Comparator.comparingInt(String::length)
                             .thenComparing(Comparator.naturalOrder()));
        System.out.println(names);
    }
}

학습 팁

람다가 3줄을 넘으면 메서드로 추출하고 메서드 참조를 사용하는 것이 가독성이 좋습니다.

주의할 점

람다에서 외부 변수를 수정하려면 effectively final이어야 합니다. int counter = 0; list.forEach(n -> counter++);는 컴파일 에러입니다.

자주 묻는 질문

람다 표현식 심화란 무엇인가요?

람다의 다양한 형태와 클로저, 효과적 final 변수를 이해합니다.

람다 표현식 심화 학습 시 주의할 점은 무엇인가요?

람다에서 외부 변수를 수정하려면 effectively final 이어야 합니다. int counter = 0; list.forEach(n -> counter++); 는 컴파일 에러입니다.