Java/자바 정리

153. 람다식 기초 사용법 – 함수형 인터페이스와 람다 전달

코딩하는냥이 2025. 5. 22. 10:54
반응형

자바 8부터 도입된 람다식(Lambda Expression)은 코드를 간결하게 작성할 수 있도록 도와주는 문법입니다.
특히 함수형 인터페이스를 매개변수로 받아 작업을 전달할 때 유용하게 쓰입니다.
이번 예제에서는 두 개의 람다식을 Calculable 인터페이스를 통해 전달하고,
각기 다른 계산 방식(덧셈, 뺄셈)을 구현해보겠습니다.


📦 Calculable.java

package ch16.sec01;

public interface Calculable {
	void calculate(int x, int y);
}

📌 예제 코드

package ch16.sec01;

public class LambdaExample {
	public static void main(String[] args) {
		// 람다식 1: 덧셈
		action((x, y) -> {
			int re = x + y;
			System.out.println("result : " + re);
		});

		// 람다식 2: 뺄셈
		action((x, y) -> {
			int re = x - y;
			System.out.println("result : " + re);
		});
	}

	public static void action(Calculable calculable) {
		int x = 10;
		int y = 4;
		calculable.calculate(x, y);
	}
}

💻 실행 결과

result : 14
result : 6

💬 코드 설명

  • Calculable은 calculate(int x, int y) 메서드를 정의한 함수형 인터페이스입니다.
  • LambdaExample 클래스에서는 action() 메서드를 통해 인터페이스를 전달받아 실행합니다.
  • main() 메서드에서 람다식을 통해 각각 덧셈, 뺄셈 연산을 구현하고 전달합니다.
  • action() 내부에서는 고정된 값 x = 10, y = 4를 각 람다식에 넘겨 실행합니다.

💡 포인트 정리

  • 함수형 인터페이스란, 단 하나의 추상 메서드만 가지고 있는 인터페이스를 의미합니다.
  • 람다식은 이러한 함수형 인터페이스를 구현할 때 익명 클래스를 간결하게 표현할 수 있는 방법입니다.
  • (x, y) -> { ... } 형태로 작성하며, 실행 내용은 중괄호 {} 안에 정의합니다.
  • 코드 전달의 유연성과 가독성이 높아지기 때문에, 콜백 구조나 이벤트 처리에 매우 유용합니다.

📌정리하자면, 람다식은 자바에서 함수형 프로그래밍을 지원하기 위한 핵심 기능입니다.
함수형 인터페이스와 함께 사용하면 간결하고 직관적인 코드 작성이 가능해집니다.
이번 예제를 통해 람다식의 기본 구조와 활용법을 익히셨다면,
이후 다양한 연산이나 처리 로직을 람다로 쉽게 구현하실 수 있을 것입니다.


✅ 추가 정리, 오버라이딩과 람다식의 차이점

1. 메서드 오버라이딩이란?

  • 부모 클래스나 인터페이스에 정의된 메서드를 자식 클래스가 재정의하는 것.
  • 예:
class Parent {
    void run() { System.out.println("부모"); }
}

class Child extends Parent {
    @Override
    void run() { System.out.println("자식"); }
}

2. 람다식은?

  • 인터페이스의 “단 하나의 추상 메서드”를 구현하는 익명 함수 표현식입니다.
  • 자바에서는 함수형 인터페이스를 대상으로만 람다식을 사용할 수 있습니다.
  • 예:
Runnable task = () -> System.out.println("작업 실행");

위 코드는 사실상 아래의 코드와 같습니다 :

Runnable task = new Runnable() {
    @Override
    public void run() {
        System.out.println("작업 실행");
    }
};

✅ 결론적으로 말하면

  • 람다식은 메서드를 오버라이딩하는 것이 아니라,
    단 하나의 추상 메서드를 가진 인터페이스의 "구현체"를 제공하는 방식입니다.
  • 하지만 컴파일 이후 바이트코드 수준에서 보면, 오버라이딩처럼 동작하는 부분도 있으므로 헷갈릴 수 있습니다.
  • 그래서 람다식은 오버라이딩과 비슷한 “행동 대체”를 하되, 상속 계층과는 무관한 독립적인 함수 표현 방식이라고 보면 됩니다.