람다식 작성 예시

Soobin Kim·2024년 4월 6일

Java

목록 보기
38/47
int max(int a, int b){
   return a > b ? a : b;
}

//람다식 표현
(int a, int b) -> {return  a > b ? a : b;} 
  • 반환값이 있는 메서드의 경우, return문 대신 식(expression)으로 대신할 수 있다. 식의 연산 결과가 자동으로 반환값이 되기 때문이다.

    • 이때 문장이 아닌 '식'이므로 끝에 ;을 붙이지 않는다.
(int a, int b) -> {return  a > b ? a : b;}   /*-->*/ (int a, int b) ->  a > b ? a : b

  • 람다식에 선언된 매개변수의 타입은 추론이 가능한 경우 생략할 수 있다.
(int a, int b) -> return  a > b ? a : b /*-->*/ (a, b) ->  a > b ? a : b

  • 선언된 매개변수가 하나일 경우 괄호 ()를 생략할 수 있다. 단, 매개변수의 타입이 있으면 괄호 ()를 생략할 수 없다.
(a) -> a * a         /*-->*/   a -> a * a   
(int a) -> a * a     /*-->  int a -> a * a   오류. 매개변수의 타입이 존재*/

  • {}괄호 안의 문장이 하나일 때 괄호 {}를 생략할 수 있다. 이때 문장의 끝에 ;을 붙이지 않도록 주의.

    • 주의: 괄호 {} 안의 문장이 return일 경우 {}를 생략할 수 없다.
(String name, int i) -> {System.out.println(name+"="+i);}
//람다식 표현
(String name, int i) -> System.out.println(name+"="+i)
//주의
(int a, int b) -> {return a > b ? a : b;}
// (int a, int b) -> return a > b ? a : b 는 에러

람다식 작성 예시


@FunctionalInterface
interface MyFunction {
	void run(); // public abstract void run();
}

public class Test {
	static void execute(MyFunction f) { // 매개변수의 타입이 MyFunction인 메서드
		f.run();
	}

	static MyFunction getMyFunction() { // 반환 타입이 MyFunction인 메서드
		MyFunction f = () -> System.out.println("f3.run()");
		return f;
	}

	public static void main(String[] args) {
		// 람다식으로 MyFunction의 run()을 구현
		MyFunction f1 = () -> System.out.println("f1.run()");

		MyFunction f2 = new MyFunction() { // 람다식이 아닌 익명클래스로 run()을 구현
			public void run() { // public을 반드시 붙여야 함(오버라이딩 규칙)
				System.out.println("f2.run()");
			}
		};

		MyFunction f3 = getMyFunction();

		f1.run();
		f2.run();
		f3.run();

		execute(f1);
		execute(() -> System.out.println("run()"));
	}
}

0개의 댓글