본문 바로가기

Programming/JAVA

람다식(2) - 람다식의 타겟 타입, 함수적 인터페이스 3

java logo image

 

 

 

○ 파라미터와 리턴 값이 있는 람다식

 

이번에는 파라미터와 리턴 값이 모두 존재하는 람다식에 대해서 작성 방법을 살펴보겠습니다. 당연히 파라미터와 리턴 식을 작성해 주면 되는 간단한 문제이지만, 이 경우에도 람다식에서 생략이 가능한 부분들이 있기 때문에 몇 가지 작성 방식에 차이가 발생합니다. 

 

머리가 복잡하다면 일단 기본형을 먼저 익혀두고, 생략하는 방법을 적용해 나갑시다. 

 

 

우선 인터페이스에서 다음과 같이 추상 메서드가 선언되었습니다. 리턴 타입은 int, 파라미터도 두 개가 존재합니다. 

 

@FunctionalInterface
public interface MyFunctionalInterface {
	public int method(int x, int y);
}

 

이 인터페이스를 람다식으로 표현하는 여러 가지 방식을 바로 실행 코드에서 적용해 살펴보겠습니다. 

 

public class ExampleMain {	
	public static void main(String[] args) {
		MyFunctionalInterface fi;
		
		fi = (x, y) -> {
			int result = x + y;
			return result;
		};
		System.out.println(fi.method(3, 5));
		
		fi = (x, y) -> { return x + y; };
		System.out.println(fi.method(3, 5));
		
		fi = (x, y) -> x + y;
		System.out.println(fi.method(3, 5));
		
		fi = (x, y) -> sum(x, y);
		System.out.println(fi.method(3, 5));
		
	}
	
	public static int sum(int x, int y) {
		return (x + y);
	}
}

/* 출력
8
8
8
8
*/

 

위의 코드에서 첫 번째 fi 람다식은 추상 메서드 재정의가 두 줄로 이루어졌습니다. 그리고 fi.method(3, 5)라는 형식으로 실행되었습니다. 

 

세 번째 fi 람다식을 보겠습니다. 중괄호 없이 x + y; 만이 작성되었는데, 만일 람다식에서 return 문 하나만 존재한다면 해당 식은 return 문이 생략이 가능합니다. 즉, 해당 식은 두 번째와 같은 코드를 의미합니다. 

 

이 원칙은 네 번째 fi 람다식에도 동일하게 적용됩니다. 따로 존재하는 static 메서드 sum(x, y)를 return 하라는 의미가 됩니다. 여기서도 return과 중괄호가 생략되어 (x, y) -> sum(x, y); 형태로 작성된 것입니다.