https://ssdragon.tistory.com/14
람다식이란?
람다식(Lambda Expressions) 메서드를 하나의 식(expression)으로 표현한 것! 이름이 없는 메서드! 메서드를 람다식으로 표현하면 메서드 이름과 반환값이 없어지므로 익명 함수(anonymous function)라고도 부
ssdragon.tistory.com
위 글의 연장선이다. 함수형 인터페이스에 대해 설명하다보면 람다식이 나오니까 꼭 먼저 읽어보자.
🤔 함수형 인터페이스(Functional Interface) 란 무엇인가?
이것은 하나의 추상 메서드만을 갖는 인터페이스(Interface)이다.
그래야지 람다식과 인터페이스의 메서드가 1:1로 연결될 수 있기 때문이다!!
이 추상 메서드의 매개변수의 개수와 타입, 리턴타입과 동일한 람다식을 할당해서 사용할 수 있다.
(함수형 인터페이스의 Static 메서드와 Default 메서드의 개수에는 제약이 없다)
함수형 인터페이스는 2개 이상의 추상 메서드가 되지 않도록 방지하려면 @FunctionallInterface 라는 어노테이션을 붙이면 된다. 이것을 붙였을 때 2개 이상이면 자바 컴파일러가 컴파일 오류를 발생시킨다. 이 어노테이션은 선택사항이지만 실수를 방지하기 위해 달아두면 좋을 것 같다.
💻 위 사항들을 참고하여 예시를 만들어보자.
코드 중간에 getMyFunction() 메서드의 반환 타입이 MyFunction 타입으로 되어있는데 return값에 바로 람다식을 넣을 수 있다.
🤔 java.util.function 패키지란?
java.util.function 패키지은 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의한 것
그래서 새로운 함수형 인터페이스를 생성하지말고 가능하면 이 패키지를 활용하는 것이 좋다.
💻 자주 사용하는 가장 기본적인 함수형 인터페이스
1개의 매개변수와 리턴값의 유무에 따라 4개의 함수형 인터페이스가 정의되어 있다.
대중적으로 사용하는 타입 문자
타입 | 설명 |
<T> | Type |
<R> | Return Type |
<E> | Element |
<K> | Key |
<V> | Value |
<N> | Number |
위는 대중적으로 쓰는 암묵적인 규칙이라 보면된다.
그러므로 반드시 한 글자일 필요가 있거나 설명과 일치할 필요도 없다.
🤔 지금까지 본 함수랑 다르게 <타입문자>가 들어가는데 이건 무엇인가요?
제네릭(Generic) 이라고 합니다. 이것은 데이터 형식에 의존하지 않고, 하나의 값이 다른 데이터 타입들을 가질 수 있도록 하는 방법입니다. 좀 더 쉽게말하자면 봉투를 만들어놓고 우리가 무엇을 넣냐에 따라서 라면 타입 봉투가 되기도하고, 과자 타입 봉투가 되는거죠.
💻 매개변수가 2개인 함수형 인터페이스
매개변수가 2개인 함수형 인터페이스는 이름 앞에 'Bi' 가 붙는다.
위에서도 말했듯이 타입문자 T, U, R 이런건 너무 신경쓰지 않아도 된다. 타입이 들어간다고만 생각하자.
💻 매개변수가 3개 이상 함수형 인터페이스
아래 사진처럼 3개 이상부터는 직접 만들어야 한다.
💻 매개변수 타입과 동일한 리턴 타입인 함수형 인터페이스
Function과 BiFunction의 자손으로 위 함수형 인터페이스 2개가 있다.
'프로그래밍 > Java' 카테고리의 다른 글
컬렉션 프레임워크(Collections Framework) (0) | 2022.01.19 |
---|---|
Java 언박싱 형변환 (0) | 2022.01.14 |
람다식이란? (0) | 2022.01.12 |
JAVA 8은 왜 이렇게 많이 쓸까? (1) | 2022.01.12 |
Java 통합 개발 환경(IDE) (3) | 2022.01.11 |