18.3 매개변수가 있는 람다식
1. 자판기 동전 투입구 🪙
매개변수가 있다는 것은 “외부에서 재료를 받아서 처리한다”는 뜻입니다. 마치 자판기에 동전을 넣으면 음료가 나오는 것과 같습니다.
- 문법:
(x) -> { ... }
2. 문법 규칙
매개변수의 타입(int, String 등)은 런타임 시에 대입되는 값에 따라 자동으로 인식되므로 생략하는 것이 일반적입니다.
// 정석 (타입 명시)
(String name) -> { System.out.println(name); }
// 약식 (타입 생략 - 추천)
(name) -> { System.out.println(name); }
// 초약식 (매개변수가 하나일 때만 괄호 생략 가능)
name -> System.out.println(name);
3. 예제: 매개변수 처리
함수형 인터페이스 정의
package ch18.sec03;
@FunctionalInterface
public interface Workable {
void work(String name, String job); // 매개변수 2개
}
@FunctionalInterface
public interface Speakable {
void speak(String content); // 매개변수 1개
}
실행 코드
package ch18.sec03;
public class LambdaExample {
public static void main(String[] args) {
Person person = new Person();
// 1. 매개변수가 두 개일 경우 (괄호 필수)
person.action1((name, job) -> {
System.out.print(name + "이 ");
System.out.println(job + "을 합니다.");
});
// 한 줄로 줄이기
person.action1((name, job) -> System.out.println(name + "이 " + job + "을 하지 않습니다."));
// 2. 매개변수가 한 개일 경우 (괄호 생략 가능)
person.action2(word -> {
System.out.print("\"" + word + "\"");
System.out.println("라고 말합니다.");
});
// 한 줄로 줄이기
person.action2(word -> System.out.println("\"" + word + "\"라고 외칩니다."));
}
}
실행 결과
홍길동이 프로그래밍을 합니다.
홍길동이 프로그래밍을 하지 않습니다.
"안녕하세요"라고 말합니다.
"안녕하세요"라고 외칩니다.
핵심: 매개변수가 하나일 때만 괄호
()를 생략할 수 있습니다. 두 개 이상이면 반드시(a, b)처럼 묶어야 합니다.
서브목차