본문 바로가기
Java Tutorial

[Java] 람다식

by 미소5 2023. 3. 14.
  • 람다식
    • 함수(메소드)간단한 '식(expression)'으로 표현하는 방법
      • (타입 매개변수, ...)  ->  { 실행문;  ... }
    • 이름없는 익명함수를 생성하는 식

(a)-> { System.out.println(a); }
//다음과 같이 쓸 수 있다. 
a->System.out.println(a)
(x,y) -> { return x+y; };
//다음과 같이 쓸 수 있다. 
(x,y) ->  x+y
  • 하나의 매개변수만 있는 경우,  괄호()를 생략할 수 있다.
  • 하나의 실행문만 있는 경우(블럭 안 문장이 하나),  중괄호{}와 ;를 생략할 수 있다.
  • 반환값이 있는 경우, return문을 생략할 수 있다.
  • 매개변수 타입은 대부분 생략 가능

  • 함수적 인터페이스 
    • 람다식 객체의 선언과 생성을 동시에 하는 익명객체이다. 이 람다식(익명객체)을 다루기 위한 참조변수가 필요한데, 이 참조변수는 무슨 타입일까? →  하나의 추상메소드가 선언된 함수적 인터페이스가 람다식의 타겟타입이 될 수 있다.
@FunctionalInterface
public interface MyFuncInterface{
	public void method(); //추상메소드
}
//인터페이스 변수 = 람다식;
MyFuncInterface fi = () -> {
	String str="method call";
	System.out.println(str);
};
fi.method();
  • @FunctionalInterface 어노테이션:  인터페이스 선언할때, 두개이상의 추상메소드가 선언되지않도록 체킹해준다.

/*매개변수 있는 함수적 인터페이스*/
@FunctionalInterface
public interface MyFuncInterface{
	public void method(int x); 
}
/*
MyFuncInterface fi = (x,y) -> {
	return x+y;
}
*/
MyFuncInterface fi = (x,y) -> x+y;
  • 함수적 인터페이스 타입의 참조변수로 람다식을 참조할 수 있다. 단, 함수적 인터페이스의 메소드와 람다식의 매개변수 개수반환타입 일치해야 한다.
int result = fi.method(2,5);	//7
//실제로는 람다식(익명함수)이 호출된다
  • 람다식이 대입된 인터페이스의 참조변수는 method()를 호출할 수 있다.
728x90
반응형