본문 바로가기
Java

람다 표현식

by DoRightting 2024. 7. 16.
  • 함수형 인터페이스로 한정되어 사용할 수 있는 표현식.
    • 매서드 반환 타입, 메서드 이름 생략
    • 매개변수 타입 생략
    • 리턴문이 한줄만 있을 경우 중괄호와 리턴 생략, 단 ;는 붙여야 함.
int add(int x, int y){
	return x + y;
}

// 위의 메서드를 람다 표현식을 이용해 아래와 같이 단축 시킬 수 있다. (메서드 반환 타입, 메서드 명 생략)
(int x, int y) -> {
	return x + y;
};

//매개변수 타입도 생략할 수 있다.
(x, y) -> {
	return x + y;
};

//함수에 리턴문 한줄만 있을 경우 더욱 더 단축 시킬 수 있다. (중괄호, return 생략)
(x, y) -> x + y;

 

 

  • 함수형 인터페이스란?
    • 딱 하나의 추상 메소드가 선언된 인터페이스. 단, final 상수나 default, static, private 메서드는 추상 메서드가 아니기 때문에, 이들 여러개가 인터페이스에 들어있어도 오로지 추상메서드가 한개이면 함수형 인터페이스로 취급됨.
// 함수형 인터페이스가 될 수 있다.
interface IAdd {
    int add(int x, int y);
}

// 함수형 인터페이스가 될수 없다.
interface ICalculate {
    int add(int x, int y);
    int min(int x, int y);
}

// 구성요소가 많아도 결국 추상 메서드는 한개이기 때문에 함수형 인터페이스이다.
interface IAdd {
    int add(int x, int y);

    final boolean isNumber = true; // final 상수
    default void print() {}; // 디폴트 메서드
    static void print2() {}; // static 메서드
}

 

 

  • 람다식 매개변수 할당
    • 기존의 메서드 활용은 클래스를 new로 불러와서 클래스.메서드() 형태로 사용하였지만, 메서드도 일반 데이터처럼 메모리 주소가 할당 되어 있으며 이를 활용하여 메서드의 주소를 매개변수에 넣어 활용할 수 있다.
interface IAdd {
    int add(int x, int y);
}

public class Main {
    public static void main(String[] args) {
    	int n = result( (x, y) -> x + y ); // 메소드의 매개변수에 람다식을 전달
        System.out.println(n); // 3
    }
    
    public static int result(IAdd lambda) {
    	return lambda.add(1,2);
    }
}
  • 람다함수 자체 리턴도 가능
    • 예제
interface IAdd {
    int add(int x, int y);
}

public class Main {
    public static void main(String[] args) {
        IAdd func = makeFunction(); // 메소드의 반환값이 람다 함수
        int result = func.add(1, 2);
        System.out.println(result); // 3
    }

    public static IAdd makeFunction() {
        return (x, y) -> x + y;
    }
출처: https://inpa.tistory.com/entry/☕-Lambda-Expression [Inpa Dev 👨‍💻:티스토리]

 

 

참고 : https://inpa.tistory.com/entry/☕-Lambda-Expression

'Java' 카테고리의 다른 글

구독 시스템 - 결제 주기와 구독 서비스 로직  (1) 2024.11.22
구독 시스템 - 구독 상태 및 Entity 설계  (1) 2024.11.20
Builder 패턴  (0) 2024.07.22
메서드 체이닝  (0) 2023.10.25