JAVA

[Java] 람다(Lamda)

kimyongjun0129 2025. 4. 17. 11:33

 

 

람다(Lamda)

익명 클래스를 간단하게 표현하는 방식이다. 즉, 익명 클래스의 메서드를 코드 블록으로 만들어서 변수에 넘기거나 인자로 전달 할 수 있게 해주는 기능이다.

 

 


 

람다 문법

Calculator c = (a, b) -> a + b;	// 람다식

Calculator c1 = new Calculator() {  // 익명 클래스
    @Override
    public int sum(int a, int b) {
        return a + b;
    }
};

익명 클래스를 사용할 때보다 훨씬 간결하게 표현할 수 있다.

컴파일러가 람다 표현식을 통해 익명 클래스를 내부적으로 만들어 준다.

 

 

 


 

조건 : 함수형 인터페이스 (자바에서 권장)

@FunctionalInterface
public interface Calculator {
    public int sum(int a, int b);
}

람다는 추상 메서드가 딱 하나만 있는 인터페이스(함수형 인터페이스)에서만 사용할 수 있다.

@FunctionalInterface 어노테이션을 쓰면, 하나의 추상 메서드만 넣도록 강제해준다. 

 

public interface Calculator {
    public int sum(int a, int b);
}

하나의 추상 메서드를 가진 일반 인터페이스를 통해서도 사용 가능하다. (어노테이션의 유무)

 

 


 

사용 예제

더보기

Main

public class Main {
    public static void main(String[] args) {
        int result = calculate(5, 5, (a, b) -> a + b);
        System.out.println("result = " + result);
    }
    
    public static int calculate(int a, int b, Calculator calculator) {
        return calculator.sum(a, b);
    }
}

 

Calculator

@FunctionalInterface
public interface Calculator {
    public int sum(int a, int b);
}

람다식을 직접 매개 변수로 전달하여 사용할 수 있다. 코드가 간결해지고 가독성이 올라간다.

과정을 정리하자면,

  • calculate 메서드의 Calculator calculator = (a, b) -> a + b : 컴파일러가 Calculator 인터페이스의 람다식이라고 추론한다.
  • (a, b) -> a + b : 람다식을 통해 익명 클래스 인스턴스를 내부적으로 만든다.
  • calculator.sum(a, b) : 계산을 한 후 리턴한다.