Java - Lambda Expression

iseon_u·2022년 5월 28일
0

Java

목록 보기
65/77
post-thumbnail

Lambda Expression 람다식


  • JDK 1.8 부터 함수형 언어 추가 (OOP + FP)
  • 함수 (메서드) 를 간단한 ‘식 (expression)’ 으로 표현하는 방법
int max(int a, int b){ // 메서드
		return a > b ? a : b;
}
  • 익명 함수 (이름이 없는 함수, anonymous function)
    1. 메서드에서 반환 타입과 이름을 지운다.
    2. 매개변수와 중괄호 {} 사이에 화살표 를 넣는다.
  • 함수와 메서드의 차이
    • 함수는 일반적 용어, 메서드는 객체지향개념 용어
    • 함수는 클래스에 독립적, 메서드는 클래스에 종속적

람다식 작성

  • 함수 (메서드) 를 간단히 표현
int max(int a, int b){ // 메서드
		return a > b ? a : b;
}
~~int max~~(int a, int b) **->** { 
		return a > b ? a : b;
}
  1. 메서드의 이름과 반환 타입을 제거하고 화살표를 중괄호 {} 앞에 추가
(int a, int b) -> {
		return a > b ? a : b;
}
(int a, int b) -> {
		~~return~~ a > b ? a : b;
}
  1. 반환 값이 있는 경우, 식이나 값만 적고 return 문 생략 가능 (끝에 세미콜론 ; 안 붙임)
(int a, int b) -> a > b ? a : b
(a, b) -> a > b ? a : b
  1. 매개변수의 타입이 추론 가능하면 생략 가능 (대부분의 경우 생략 가능)

람다식 주의 사항

  1. 매개변수가 하나인 경우, 타입이 없을 때만 괄호 () 생략 가능
  2. 블록 안의 문장이 하나뿐 일 때, 괄호 {} 생략 가능 (끝에 ; 안 붙임)

람다식 == 익명 객체

  • 람다식은 익명 함수가 아니라 익명 객체
  • 람다식 (익명 객체) 를 다루기 위한 참조 변수가 필요

함수형 인터페이스

@FunctionalInterface
public interface MyFunction {
    public abstract int max(int a, int b);
}
  • 단 하나의 추상 메서드만 선언된 인터페이스
MyFunction f = (a, b) -> a > b ? a : b;
int value = f.max(3,5); // 실제로는 람다식이 호출된다.
  • 함수형 인터페이스 타입의 참조변수로 람다식을 참조 가능
  • 람다식 (익명 객체) 를 다루기 위한 참조 변수의 타입은 함수형 인터페이스
  • 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환 타입이 같아야한다.
profile
🧑🏻‍💻 Hello World!

0개의 댓글