람다식(Lambda Expression) - 매개변수가 없는 람다식, 매개변수가 있는 람다식, 리턴값이 있는 람다식
자바에서 람다식(lambda expression)은 함수형 프로그래밍을 지원하기 위해 도입된 기능으로,
코드를 간결하게 작성하고 가독성을 높이는 데 중요한 역할을 합니다.
이번 포스트에서는
매개변수가 없는 람다식, 매개변수가 있는 람다식, 리턴값이 있는 람다식을 중심으로 람다식의 개념과 활용법을 정리해 보겠습니다.
🔹 1. 매개변수가 없는 람다식
람다식은 함수형 인터페이스를 기반으로 동작합니다.
함수형 인터페이스란, "하나의 추상 메소드"만을 포함하는 인터페이스를 의미하며, 대표적인 예시로 Runnable이 있습니다.
✅ 람다식 기본 형태
@FunctionalInterface
public interface Workable {
void work(); // 추상 메소드 (매개변수 없음)
}
이제, 위 인터페이스를 구현하는 방법을 보겠습니다.
✅ 익명 객체 방식 (전통적인 방식)
Workable worker = new Workable() {
@Override
public void work() {
System.out.println("일을 합니다.");
}
};
worker.work(); // 출력: 일을 합니다.
위와 같은 코드가 람다식을 사용하면 훨씬 간결해집니다.
✅ 람다식 사용 방식
Workable worker = () -> {
System.out.println("일을 합니다.");
};
worker.work(); // 출력: 일을 합니다.
람다식에서는
✔ 매개변수가 없으면 ()를 사용하고,
✔ 실행문이 하나라면 {}를 생략할 수 있습니다.
Workable worker = () -> System.out.println("일을 합니다.");
✔ 실행문이 2개 이상일 경우 반드시 {}를 사용해야 합니다.
🔹 2. 매개변수가 있는 람다식
람다식에서 매개변수가 있는 경우, 메소드의 매개변수와 동일한 형태로 작성하면 됩니다.
✅ 람다식 기본 형태
@FunctionalInterface
public interface Speakable {
void speak(String message);
}
이 인터페이스를 구현하는 방법을 보겠습니다.
✅ 익명 객체 방식
Speakable speaker = new Speakable() {
@Override
public void speak(String message) {
System.out.println("말하기: " + message);
}
};
speaker.speak("안녕하세요!"); // 출력: 말하기: 안녕하세요!
✅ 람다식 사용 방식
Speakable speaker = (message) -> {
System.out.println("말하기: " + message);
};
speaker.speak("안녕하세요!"); // 출력: 말하기: 안녕하세요!
✔ 매개변수가 1개라면 ()를 생략할 수 있습니다.
Speakable speaker = message -> System.out.println("말하기: " + message);
✔ 매개변수가 2개 이상이면 반드시 ()를 사용해야 합니다.
✔ 실행문이 2개 이상이면 {}를 사용해야 합니다.
🔹 3. 리턴값이 있는 람다식
람다식에서 리턴값을 반환하는 경우, return 키워드를 활용합니다.
✅ 람다식 기본 형태
@FunctionalInterface
public interface Calculable {
double calculate(double x, double y);
}
이제 위 인터페이스를 구현하는 다양한 방법을 보겠습니다.
✅ 익명 객체 방식
Calculable calculator = new Calculable() {
@Override
public double calculate(double x, double y) {
return x + y;
}
};
System.out.println(calculator.calculate(10, 5)); // 출력: 15.0
✅ 람다식 사용 방식
Calculable calculator = (x, y) -> {
return x + y;
};
System.out.println(calculator.calculate(10, 5)); // 출력: 15.0
✔ 리턴문만 존재하는 경우 return과 {}를 생략할 수 있습니다.
Calculable calculator = (x, y) -> x + y;
✔ 메소드 참조를 활용하면 더욱 간결하게 작성할 수 있습니다.
Calculable calculator = Double::sum;
System.out.println(calculator.calculate(10, 5)); // 출력: 15.0
🔹 4. 람다식 활용 예제 (버튼 클릭 이벤트)
람다식은 GUI 프로그래밍에서 이벤트 처리에도 자주 사용됩니다.
예를 들어, onClickListener를 설정할 때 익명 객체를 사용하던 방식이 람다식으로 간단하게 변경될 수 있습니다.
✅ 익명 객체 방식
Button button = new Button();
button.setOnClickListener(new Button.ClickListener() {
@Override
public void onClick() {
System.out.println("버튼이 클릭되었습니다.");
}
});
✅ 람다식 사용 방식
button.setOnClickListener(() -> System.out.println("버튼이 클릭되었습니다."));
✔ 코드가 훨씬 간결해지며 가독성이 좋아집니다.
✔ 안드로이드 개발에서도 람다식이 매우 자주 사용됩니다.
🔹 5. 람다식의 장점과 활용
✅ 코드가 간결해진다 – 불필요한 익명 객체 코드를 줄이고 가독성을 높임.
✅ 함수형 프로그래밍 지원 – 스트림 API, 컬렉션 API와 결합하여 강력한 기능 제공.
✅ 이벤트 처리 간소화 – UI 프로그래밍에서 클릭 이벤트 등을 간단하게 처리 가능.
✅ 병렬 처리에 용이 – 멀티코어 환경에서 병렬 프로그래밍 활용 가능.
참조:
이것이 자바다 _ 신용권