람다식이란?
- JDK 8부터 지원하기 시작했다.
- 함수 인터페이스를 생성해야 사용할 수 있다.
- 익명함수를 생성하기 위한 표현식으로 함수형 언어에서 사용하는 함수 표현방법이다.
- 매개변수로 함수를 전달하거나 반환값으로 함수를 반환 할 수 있다.
- 람다식은 인터페이스의 추상메소드를 간결하게 그리고 하나의 추상메소드로 여러가지 기능을 갖는 다양한 일회성 익명함수를 구현하는 것이 목적이다.
- 추상 메소드를 하나만 갖는 인터페이스(함수형 인터페이스라 함)가 필요하다.
- @Functionalinterface로 인터페이스를 만드는 경우, 하나 이상의 추상메소드 정의시 컴파일 에러가 발생한다.
- 컬렉션이나 배열의 데이터를 다룰 때 Stream객체의 메소드 인자로 전달할 때 많이 사용한다.
람다식은 함수를 간결하게 표현하기 위해 많은 생략기법을 사용한다.
- 매개변수의 자료형 생략가능
- 매개변수가 한개인 경우 매개변수를 감싸는 괄호를 생략가능
- 함수 구현부에 명령문이 한개인 경우 구현부를 감싸는 중괄호 생략가능
- 함수 구현부에 명령문이 한개이고 그 명령문이 return문일 경우 return도 생략가능
- 매개변수가 없거나 두 개 이상일때는 무조건 괄호로 감싸야 한다.
-java.util.function 패키지는 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 정의해 놓았다
--------------------+-------------------------+------------------------------------------------
인터페이스 + 추상 메소드 | 설 명
--------------------+-------------------------+------------------------------------------------
java.lang.Runnable | void run() | 매개변수도 없고, 반환값도 없음
--------------------+-------------------------+------------------------------------------------
Supplier | T get() | 매개변수는 없고, 반환값만 있음
--------------------+-------------------------+-------------------------------------------------
Consumer | void accept(T t) | Supplier와 반대로 매개변수만 있고, 반환값이 없음
--------------------+-------------------------+-------------------------------------------------
Function | R apply(T t) | 일반적인 함수. 하나의 매개변수를 받아서 결과를 반환
--------------------+-------------------------+--------------------------------------------------
Predicate | boolean test(T t) | 조건식을 표현하는데 사용. 매개변수는 하나, 반환 타입은 boolean
--------------------+-------------------------+--------------------------------------------------
BiConsumer | void accept(T t,U u)| 두개의 매개변수만 있고, 반환값이 없음
--------------------+-------------------------+---------------------------------------------
BiPredicate | boolean test(T t, U u) | 조건식을 표현하는데 사용됨. 매개변수는 둘, 반환값은 boolean
--------------------+-------------------------+------------------------------------------------------
BiFunction | R apply(T t, U u) | 두개의 매개변수를 받아서 하나의 결과를 반환
--------------------+-------------------------+--------------------------------------------------------
▲ 람다식을 사용하기 위한 추상메소드를 하나만 가지는 함수형 인터페이스를 생성하자.
▲추상메소드를 가진 인터페이스를 상속받은 클래스를 정의하고 인터페이스의 추상메소드를 오버라이딩하자.
'Java' 카테고리의 다른 글
[Java]Stream (0) | 2022.04.06 |
---|---|
[Java]Generic (0) | 2022.04.06 |
[Java]입력과 출력 - File (0) | 2022.03.27 |
[Java]입력과 출력 -part.7(Object InOutStream) (0) | 2022.03.27 |
[Java]입력과 출력 -part.6(Data InOutStream) (0) | 2022.03.27 |