람다

임성혁·2022년 9월 3일

자바 기초

목록 보기
31/32

1. 람다식이란?

  • 함수를 간단한 Expression으로 표현하는 방법
int max(int a, int b) {
	return a > b ? a : b
}

(a, b) -> a > b ? a : b
  • 익명 함수라고 불림
  • 함수와 메소드의 차이는 근본적으로 동일
    • 함수는 클래스에 독립적
    • 메소드는 클래스에 종속적

2. 람다식 작성하기

1. 메소드의 이름과 반환타입을 제거하고 '->'를 블록{} 앞에 추가

X int max X(int a, int b) -> {
	return a > b ? z : b
}

2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능

(int a, int b) -> a > b ? a : b

3. 매개 변수의 타입이 추론 가능하면 생략가능

(a, b) -> a > b ? a : b

3. 작성 주의사항

  • 매개 변수가 하나인 경우 괄호() 생략가능
a -> a * a
  • 블록 안의 문장이 하나일 때 괄호() 생략가능
(int i) -> {
	System.out.println(i)
}

(int i) -> System.out.println(i)
  • 단, 하나뿐인 문장이 return문이면 괄호 생략 불가

4. 함수형 인터페이스(1/3)

  • 람다식은 익명 함수? 사실은 익명 객체
(a, b) -> a > b ? a : b

new Object() {
	int max(int a, int b) {
    	return a > b ? a : b;
    }
}
  • 함수형 인터페이스 : 단 하나의 추상 메소드만 선언된 인터페이스
  • 함수형 인터페이스 타입의 참조 변수로 람다식을 참조할 수 있음
MyFunc f = (a, b) -> a > b ? a : b
int val = f.max(3, 5)

5. java.util.function 패키지

  • Supplier : 매개변수 X, Return O
  • Consumer : 매개변수 O, Return X
  • Function : 매개변수 O, Return O
  • Predicate : 매개변수 하나만, Return Boolean

6. 메소드 참조(Method reference)

  • 하나의 메소드만 호출하는 람다식은 '메소드 참조'로 간단히 할 수 있다
  • 람다 표현식이 단 하나의 메소드만 호출하는 경우 해당 람다 표현식에서 불필요한 매개변수 제거하고 사용

클래스이름::메소드 이름
참조변수이름::메소드 이름

(base, exponent) -> Math.pow(base, exponent)
Math::pow

MyClass obj = new MyClass();
Function<String, Boolean> func = (a) -> obj.equal(a);
Function<String, Boolean> func = obj::equal(a);

oper = (n) -> Math.abs(n);
oper = Math::abs;
profile
열정

0개의 댓글