본문 바로가기
Java, JSP

[Java/자바] 람다식(Lambda Expression), 함수형 인터페이스 사용법

by LasBe 2022. 1. 20.
반응형

⚡️람다식(Lambda Expression)이란


람다식이란 간단히 말해 메소드를 하나의 식으로 표현한 것입니다.

 

메소드를 람다식으로 표현하면 메소드의 이름이 필요없기 때문에, 람다식은 익명 클래스와 비슷한 부분이 많습니다.

 

아무래도 람다식을 사용해 간략하게 표현이 가능하다보니, 코드가 간결해지고 가독성이 향상된다는 장점이 있습니다.


📌 함수형 인터페이스(Functional Interface)

interface FunctionalInterface{
	// 1개의 추상 메소드만 갖고 있어야 함수형 인터페이스이다.
	void method(); 
}

함수형 인터페이스는 위와 같이 1개의 추상 메소드를 갖고 있는 인터페이스를 뜻합니다.

 

이러한 함수형 인터페이스는 람다식과 메소드가 1:1로 연결되어야 하기 때문에

오직 하나의 추상 메소드만 정의할 수 있습니다.


📌 람다 표현식

(매개변수, ...) -> {실행문 ...}

람다 표현식은 위와 같이 사용합니다.

 

매개변수가 들어가는 괄호에는 실행문을 실행하기 위해 필요한 값을 제공하는 역활을 하며

매개변수의 이름은 자유롭게 지정할 수 있습니다.

 

이러한 람다 표현식은 메소드의 매개변수로 전달될 수도 있으며, 메소드의 결과값으로 리턴될 수 있습니다.

 

그럼 람다 표현식을 작성할 때 유의사항을 알아보겠습니다.

  • 매개변수가 하나인 경우에는 괄호()를 생략할 수 있습니다.
  • 실행문이 하나의 명령문만으로 이루어진 경우에는 중괄호{}를 생략할 수 있습니다.
  • 실행문이 하나의 return 문으로만 이루어진 경우에는 중괄호{}를 생략할 수 없습니다.
  • return 문 대신 표현식을 사용할 수 있으며, 이때 반환값은 표현식의 결과값이 됩니다.

매개변수가 없는 추상 메소드를 이용해 람다식을 사용하지 않았을 때와 사용했을 때의 차이점을 알아보겠습니다.

interface FunctionalInterface{
	// 1개의 추상 메소드만 갖고 있어야 함수형 인터페이스이다.
	void method(); 
}

 

람다식을 사용하지 않았을 때

FunctionalInterface fi = new FunctionalInterface() {
    @Override
    public void method() {
        System.out.println("익명 클래스로 추상 메소드 오버라이딩");
    }
};
fi.method();

 

람다식을 사용했을 때

FunctionalInterface fi = () -> System.out.println("람다식 사용");
// 매개 변수가 없기 때문에 빈 괄호 처리
// 실행되는 구문이 하나인 경우 {} 생략 가능
fi.method();

 

익명 클래스와 람다식을 사용한 결과는 같으나 딱 보기에도 코드의 직관성이나 양에서부터 차이가 나는 것을 볼 수 있습니다.

 

그럼 이제 간단한 예제들을 통해 람다식의 다양한 사용법을 알아보겠습니다.

 

 

 

⚡️람다식 예제


interface Calculate{
	public int method(int a, int b);
}

public class LambdaEx {
	static int calc(Calculate c, int x, int y) {
		return c.method(x, y);
	}
	public static void main(String[] args) {
		Calculate c = (a, b) -> a+b; //방법 1
		int result1 = calc(c, 5, 10); 
        
		int result2 = calc((a, b) -> a+b, 5, 10); //방법 2
	}
}

람다식을 통해 두 수를 계산하는 코드입니다.

 

2번째 방법에서는 람다식을 직접 파라미터로 넣어주었습니다.

 

구현부 메소드의 파라미터와 메인문 안에서 사용된 메소드의 전달인자를 비교하면 아래와 같습니다.

static int calc(Calculate cint xint y)

int result = calc((a, b) -> a+b510);

 


Thread t = new Thread(() -> {
	System.out.println("람다식을 통한 run() 메소드 오버라이딩");
});

2022.01.19 - [Language/Java] - [Java/자바] 쓰레드/Thread 사용법 (상속, Runnable)

 

Thread는 run() 메소드를 오버라이드 해야 실행이 가능합니다.

 

이 run() 메소드 또한 생성자에서 람다식을 통해 즉석에서 오버라이딩할 수 있습니다.

 

 

더보기

자바 람다식, 자바 lambda, 자바 함수형 인터페이스, 자바 람다, 자바 람다식 사용법

반응형

댓글


오픈 채팅