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++); 는 컴파일 에러입니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.