앞서서 함수적 인터페이스 - 즉, 단 한 개의 추상 메서드를 가지는 인터페이스를 통해 람다식을 작성하는 방법을 살펴보았습니다. 이제, 자바에서 제공하고 있는 표준 API 중에서 한 개의 추상 메서드만을 갖는 인터페이스를 살펴보겠습니다. 당연히 이러한 인터페이스들 역시 모두 람다식을 통해서 익명 구현 객체 표현이 가능하겠죠?
나중에 스레드 항목에서 다시 배워보겠지만, 스레드의 작업을 정의하는 Runnable이라는 인터페이스가 있습니다. 이 인터페이스는 파라미터와 리턴 값이 없는 run( )이라는 메서드만 존재하기 때문에, 당연히 람다식을 사용해 Runnable 인스턴스를 생성할 수 있습니다. 람다식을 통해서 다음과 같이 구현해 보겠습니다. 실행 클래스에서 람다식으로 익명 객체를 구현했습니다.
public class ExampleMain {
public static void main(String[] args) {
Runnable runnable = () -> {
for(int i = 0; i < 10; i++) {
System.out.println(i);
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
/* 출력
0
1
2
3
4
5
6
7
8
9
*/
참고로 위에서 runnable이라는 변수로 익명의 구현 인스턴스를 생성했는데, 해당 익명 인스턴스를 직접 대입할 수도 있습니다.
public class ExampleMain {
public static void main(String[] args) {
Thread thread = new Thread( () -> {
for(int i = 0; i < 10; i++) {
System.out.println(i);
}
} );
thread.start();
}
}
자바8에서부터 제공되는 함수적 인터페이스는 java.util.function 패키지의 표준 API로 제공됩니다. 여기서 제공되는 함수적 인터페이스들은 메서드 또는 생성자의 매개 타입으로 사용되어 람다식을 대입할 수 있도록 설계되어 있습니다. 지금은 100% 와닿는 표현은 아니겠지만, 다양한 분류의 함수적 인터페이스들이 준비되어 있다는 사실만 기억합시다.
표준 API로 java.util.function에서 제공되는 API들은 크게 5개의 분류로 나뉘게 됩니다.
종류 | 추상 메서드의 특징 |
Consumer | 파라미터는 있고 / 리턴 값은 없음 > 즉, 파라미터를 받아 '소비'만 해버린다. |
Supplier | 파라미터는 없고 / 리턴 값은 있음 > 즉, 리턴 값을 '공급'해준다. |
Function | 파라미터가 있고 / 리턴 값도 있다 > 주로 파라미터를 리턴 값으로 매핑해 타입 변환을 해준다. |
Operator | 파라미터가 있고 / 리턴 값도 있다 > 주로 파라미터를 연산하고 결과를 리턴하는 일반적인 형태 |
Predicate | 파라미터가 있고 / 리턴 값은 boolean > 파라미터를 조사해서 true or false를 리턴한다 |
다음 아티클부터, 각각의 함수적 인터페이스 종류별 인터페이스들에 대해서 하나씩 살펴보겠습니다.
'Programming > JAVA' 카테고리의 다른 글
람다식(4) - 표준 API의 함수적 인터페이스 3 : Supplier Functional Interface (0) | 2023.06.05 |
---|---|
람다식(4) - 표준 API의 함수적 인터페이스 2 : Consumer Functional Interface (0) | 2023.06.04 |
람다식(3) - 클래스 멤버, 로컬 변수의 사용 2 (0) | 2023.05.24 |
람다식(3) - 클래스 멤버, 로컬 변수의 사용 1 (0) | 2023.05.18 |
람다식(2) - 람다식의 타겟 타입, 함수적 인터페이스 3 (0) | 2023.05.16 |