1)순서
인터페이스 --> 익명클래스 --> 람다(lambda) --> 표준 API 함수적 인터페이스 --> 자바스트림 API (컬렉션 기반)
2)람다(lambda) 표현식
- 자바는 최소단위가 클래스이다.
- 메서드능(기능) 하나만 필요해도 무조건 클래스를 만들어야 된다. 매우 비효율적이다.
기능에만 집중해서 충실하게 프로그래밍 하자
==> 함수형 프로그래밍(functional programming ) - 역할:
익명클래스의 추상 메서드를 표현하기 위한 식이다. - 특징:
반드시 추상 메서드는 하나만 존재해야 된다. 두 개 이상인 경우에는 람다(lambda) 표현식 사용불가.
@FunctionalInterface 어노테이션을 이용하여 두 개 이상의 추상 메서드가 선언되지 못하도록 강제한다.
( default 메서드 및 static 메서드는 여러개 지정해도 상관없다. ) - 메서드 기능에 따라서 람다 표현식이 달라진다.
4가지 기능에 해당하는 람다 표현식이 있다. - 가. 파라미터 없고 리턴값 없는 경우
나. 파라미터 있고 리턴값 없는 경우
다. 파라미터 없고 리턴값 있는 경우
라. 파라미터 있고 리턴값 있는 경우
3) 표준 API 함수적 인터페이스
개념
- 람다 표현식을 이용해서 처리하는 기능(4가지 기능)을 자바 API로 제공함.
- java.util.function 패키지로 제공됨.
- @FunctionalInterface 어노테이션으로 지정되어 있음. ( 추상메서드는 단 하나만 존재 )
가. Consumer 인터페이스
- 파라미터 있고 리턴값 없음
- accept(T) 메서드 처리
< 파라미터가 한 개인 경우 >
*DoubleConsumer 인터페이스
-파라미터 있고 리턴값 없음
*IntConsumer 인터페이스
-파라미터 있고 리턴값 없음
-accept(int) 메서드 처리
*LongConsumer 인터페이스
-파라미터 있고 리턴값 없음
-accept(long) 메서드 처리
< 파라미터가 두 개인 경우>
* BiConsumer<T,U>
-파라미터 있고 리턴값 없음
-accept(T t, U u)
* ObjDoubleConsumer<T>
-파라미터 있고 리턴값 없음
-accept(T t, double)
* ObjIntConsumer<T>
-파라미터 있고 리턴값 없음
-accept(T t, int)
* ObjLongConsumer<T>
-파라미터 있고 리턴값 없음
-accept(T t, long)
나. Supplier 인터페이스
- 파라미터 없고 리턴값 있음
- T get() 메서드 이용
* BooleanSupplier 인터페이스
-파라미터 없고 리턴값 있음
-boolean getAsBoolean()
* DoubleSupplier 인터페이스
-파라미터 없고 리턴값 있음
-boolean getAsDouble()
* IntSupplier 인터페이스
-파라미터 없고 리턴값 있음
-boolean getAsInt()
* LongSupplier 인터페이스
-파라미터 없고 리턴값 있음
-boolean getAsLong()
다. Function<T,R> 인터페이스 ★
- 파라미터 있고 리턴값 있음
- R apply(T t)
< 메서드 파라미터 갯수가 한 개 인 경우 >
* DoubleFunction<R>
-파라미터 있고 리턴값 있음
-R apply(double value)
* IntFunction<R>
-파라미터 있고 리턴값 있음
-R apply(int value)
* DoubleToIntFunction
-파라미터 있고 리턴값 있음
-int applyAsInt(double value)
* DoubleToLongFunction
-파라미터 있고 리턴값 있음
-long applyAsLong(double value)
* IntToDoubleFunction
-파라미터 있고 리턴값 있음
-double applyAsDouble(int value)
* IntToLongFunction
-파라미터 있고 리턴값 있음
-long applyAsLong(int value)
* LongToIntFunction
-파라미터 있고 리턴값 있음
-int applyAsInt(long value)
* LongToDoubleFunction
-파라미터 있고 리턴값 있음
-double applyAsDouble(long value)
* ToIntFunction<T>
-파라미터 있고 리턴값 있음
-int applyAsInt(T value)
* ToDoubleFunction<T>
-파라미터 있고 리턴값 있음
-double applyAsDouble(T value)
< 메서드 파라미터 갯수가 두 개 인 경우 >
* BiFunction<T,U,R>
-파라미터 있고 리턴값 있음
-R apply(T t, U u)
* ToIntBiFunction<T,U>
-파라미터 있고 리턴값 있음
- int applyAsInt(T t, U u)
* ToDoubleBiFunction<T,U,R>
-파라미터 있고 리턴값 있음
-double applyAsDouble(T t, U u)
라. Operator 인터페이스
- 파라미터 있고 리턴값 있음
< 파라미터 갯수가 한 개인 경우 >
* UnaryOperator<T> ==> 파라미터 타입은 T, 리턴타입은 T이다
- 파라미터 있고 리턴값 있음
- T apply(T t)
- 부모는 Function<T,R> 이다. ==> Function은 파라미터 타입은 T, 리턴타입은 R이다.
=> R apply(T t)
* DoubleUnaryOperator ==> 파라미터 타입은 double, 리턴타입은 double이다
- 파라미터 있고 리턴값 있음
- double applyAsDouble(double operand)
* IntUnaryOperator ==> 파라미터 타입은 int, 리턴타입은 int이다
- 파라미터 있고 리턴값 있음
- int applyAsInt(int operand)
< 파라미터 갯수가 두 개인 경우 >
* BinaryOperator<T>
- 파라미터 있고 리턴값 있음
- T apply(T t, T t2) ==> 파라미터 타입은 T 하고 T, 리턴타입도 T이다
- 부모는 BiFunction<T,U, R> ==> BiFunction은 파라미터 타입은 T하고 U, 리턴타입은 R이다.
* IntBinaryOperator
- 파라미터 있고 리턴값 있음
- int applyAsInt(int left, int right)
마. Predicate 인터페이스 ★
- 파라미터 있고 리턴값 있음.
- 무조건 리턴값은 boolean 이다.
< 파라미터 갯수가 한 개인 경우 >
* Predicate<T>
- 파라미터 있고 리턴값 있음
- 무조건 리턴값은 boolean 이다.
- boolean test(T t)
* IntPredicate
- 파라미터 있고 리턴값 있음
- 무조건 리턴값은 boolean 이다.
- boolean test(int value)
* DoublePredicate
- 파라미터 있고 리턴값 있음
- 무조건 리턴값은 boolean 이다.
- boolean test(double value)
< 파라미터 갯수가 두 개인 경우 >
* BiPredicate<T,U>
- 파라미터 있고 리턴값 있음
- 무조건 리턴값은 boolean 이다.
- boolean test(T t, U u)
'Programming Language > JAVA' 카테고리의 다른 글
자바 스트림 API - 스트림 생성 (0) | 2023.09.07 |
---|---|
자바 스트림 API (java stream API) (0) | 2023.09.07 |
[Do it 자바 프로그래밍 입문] 16. 입출력 스트림 (0) | 2023.06.16 |
[Do it 자바 프로그래밍 입문] 15. 예외 처리 (0) | 2023.06.15 |
[Do it 자바 프로그래밍 입문] 14. 내부 클래스, 람다식, 스트림 (1) | 2023.06.15 |