728x90
람다식
- Java 8 부터 도입된 함수형 프로그래밍 스타일의 문법
- 인터페이스를 구현하는 객체 생성 코드를 수식 형태로 단순화
- 1개의 추상 메소드만 가진 인터페이스에서만 사용 가능
→ 이런 인터페이스를 함수형 인터페이스라 하며, @FunctionalInterface 어노테이션으로 선언 가능
- 람다식 = 메서드를 간단한 식으로 표현한 것
# 람다식 문법
- 매개변수 자료형은 인터페이스 정의에서 알 수 있으므로 자료형을 생략하고 변수 이름만 사용 가능
- 매개변수가 1개면 괄호 생략 가능
- 매개변수를 가지지 않으면 괄호만 남음
- 실행할 코드에서 실행문이 1개이면 중괄호 생략 가능
- 단, 실행문이 return문 뿐이라면 return과 세미콜론, 중괄호를 생략하고 1개의 수식만 적어야 함
인터페이스 객체변수 = (매개변수) -> {실행할 코드};
// 매개변수: 함수에 들어오는 값
// -> : "람다"의 핵심
// 실행할 코드: 함수처럼 실행될 내용
# 람다의 축약형 - 메서드 참조( : : )
List<String> names = List.of("홍길동", "김철수", "이영희");
// 람다식
names.forEach(name -> System.out.println(name));
// 메서드 참조
names.forEach(System.out::println);
# 함수형 인터페이스 종류와 활용
인터페이스 | 형태 | 설명 |
Runnable | () -> {} | 스레드 실행 등 |
Consumer<T> | T -> void | 값을 소비 (forEach 등) |
Function<T,R> | T -> R | 값 변환 |
Predicate<T> | T -> boolean | 조건 판단 (filter 등) |
Comparator<T> | (T, T) -> int | 정렬 기준 |
# 람다식 활용 예제
- 스레드 실행: Runnable
// 전통 방식
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("스레드 실행 중");
}
};
new Thread(task).start();
// 람다식
Runnable task2 = () -> System.out.println("스레드 실행 중");
new Thread(task2).start();
- 정렬 기준 지정: Comparator
List<String> names = Arrays.asList("홍길동", "김철수", "이영희");
// 전통 방식
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return a.length() - b.length(); // 글자 길이 순
}
});
// 람다식
names.sort((a, b) -> a.length() - b.length());
- 컬렉션 반복 처리: forEach, map, filter 등 (Java Stream API)
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 전통 방식 (짝수만 출력)
for (int n : numbers) {
if (n % 2 == 0) {
System.out.println(n);
}
}
// 람다식 forEach 예시(전체 출력)
numbers.forEach(n -> System.out.println("숫자: " + n));
// 람다식 (Stream + filter)
numbers.stream()
.filter(n -> n % 2 == 0)
.forEach(System.out::println);
// 값에 10 더해서 출력 (map)
numbers.stream()
.map(n -> n + 10)
.forEach(System.out::println);
728x90
'언어(Language) > Java' 카테고리의 다른 글
[Java] Object 클래스 (1) | 2025.06.08 |
---|---|
[Java] 패키지 (1) | 2025.05.09 |
[Java] 제네릭 (0) | 2025.05.03 |
[Java] Scanner 클래스 (1) | 2025.04.24 |
[Java] Lombok 어노테이션 (28) | 2024.02.24 |