본문 바로가기

Programming/JAVA

람다식(4) - 표준 API의 함수적 인터페이스 1

java logo image

 

 

앞서서 함수적 인터페이스 - 즉, 단 한 개의 추상 메서드를 가지는 인터페이스를 통해 람다식을 작성하는 방법을 살펴보았습니다. 이제, 자바에서 제공하고 있는 표준 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를 리턴한다

 

다음 아티클부터, 각각의 함수적 인터페이스 종류별 인터페이스들에 대해서 하나씩 살펴보겠습니다.