Web Programming Language/JAVA

람다식(Lambda Expression) - 매개변수가 없는 람다식, 매개변수가 있는 람다식, 리턴값이 있는 람다식

manchesterandthecity 2025. 3. 5. 21:25

자바에서 람다식(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 프로그래밍에서 클릭 이벤트 등을 간단하게 처리 가능.
병렬 처리에 용이 – 멀티코어 환경에서 병렬 프로그래밍 활용 가능.
 
 
 
 
 
 

참조:
이것이 자바다 _ 신용권