함수형 인터페이스 (functional interface)
람다 표현식을 사용할 때에는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야 한다.
참조 변수의 타입 참조 변수의 이름 = 람다 표현식
위 문법 처럼 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입을 함수형 인터페이스라고 부른다. 이 함수형 인터페이스는 추상 클래스와 달리 단 하나의 추상 메소드만 가져야 하며, annotation을 사용하여 함수형 인터페이스를 명시할 수 있다.
@FunctionalInterface
annotation을 인터페이스 선언 앞에 붙이면, 해당 인터페이스는 함수형 인터페이스로 인식하고 명시된 함수형 인터페이스에 두 개 이상의 메서드가 선언되면 오류를 발생시킨다.
기본 문법
Runnable runnable = new Runnable() {
public void run() { ... }
};
전
====================================
후
Runnable runnable = () -> { ... };
0. 기본
(타입 매개변수) -> { ... }
1. 매개변수가 1개 일 때, 매개변수 () 생략가능
매개변수 -> { ... }
2. 실행문이 하나일 경우 중괄호 { }는 생략 가능
(매개변수) -> System.out.println(num1)
3. 매개변수가 2개 이상, 리턴문만 존재할 때는 return과 {} 생략가능
(num1, num2) -> {return num1 + num2} // 전 --> 후
(num1, num2) -> num1 + num2 // return
4. 매개변수가 2개 이상, 실행문을 실행하고 결과값을 리턴할 경우
(매개변수1, 매개변수2) -> { ... };
메서드 레퍼런스
람다식에서 불필요한 매개변수를 제거하는것이 목적
람다식은 종종 메서드를 단순히 호출만 하는 경우도 많음.
IntBinaryOperator operato = Math :: max; //메서드 레퍼런스
인스턴스 메서드 레퍼런스 vs 정적 메서드 레퍼런스
클래스 :: 메서드 // 인스턴스 생성 없이 바로 사용할 수 있다.
정적 메서드 레퍼런스
//================================================
인스턴스 메서드 레퍼런스
참조 변수 :: 메서드 // 객체를 생성해서 참조 변수를 받아와야 한다.
'IT 정보 > Java' 카테고리의 다른 글
[Java] enum (0) | 2022.05.19 |
---|---|
[Java] 애너테이션 ( Annotation ) (7) | 2022.05.19 |
[Java] Collection Framwork (Map편) (26) | 2022.05.18 |
[Java] Collection Framwork (List편) (8) | 2022.05.18 |
[Java] 내부 클래스(Inner class) (10) | 2022.05.18 |