본문 바로가기

Programming/JAVA

람다식(4) - 표준 API의 함수적 인터페이스 3 : Supplier Functional Interface

java logo image

 

우리는 앞서서 Consumer 함수적 인터페이스를 살펴보았습니다. 여기서 Consumer 계열 인터페이스의 특징은 "파라미터는 있지만, 리턴 값은 없다"는 점이 특징이었죠.

 

 

 

람다식(4) - 표준 API의 함수적 인터페이스 2 : Consumer Functional Interface

앞선 아티클에서 표준 API로 제공되는 함수적 인터페이스들의 종류에 대해서 간단히 살펴보았습니다. 람다식(4) - 표준 API의 함수적 인터페이스 1 앞서서 함수적 인터페이스 - 즉, 단 한 개의 추상

nozeroslope.tistory.com

 

이번 시간에 살펴볼 Supplier는 이름에서 유추할 수 있다시피, Consumer 타입과는 반대로 [파라미터는 없고, 리턴 값이 있는 추상 메서드]를 갖습니다. 이때 추상메서드는 getXXX( ) 형태의 이름을 갖게 됩니다. 여기서는 리턴되는 값들의 타입에 따라서 인터페이스가 달라지게 됩니다. 아래 리스트를 확인해 주세요.

 

인터페이스 명 추상 메서드 설명
Supplier<T> T get( ) T 타입의 객체를 리턴한다
BooleanSupplier boolean getAsBoolean( ) boolean 타입 값을 리턴한다
DoubleSupplier double getAsDouble( ) double 타입 값을 리턴한다
IntSupplier int getAsInt( ) int 타입 값을 리턴한다
LongSupplier long getAsLong( ) long 타입 값을 리턴한다

 

예를 들어 제네릭을 사용하는 Supplier<String> 인터페이스를 사용한다고 가정하면, 다음과 같이 인터페이스 구현 코드를 작성하게 됩니다. 파라미터는 없으므로 ( )를 사용하고, 중괄호 { } 안에는 반드시 return이 필요합니다. 여기서 제네릭 타입으로 String을 지정했기 때문에 반드시 문자열을 리턴해야 합니다. 

 

Supplier<String> supplier = () -> { ... ; return "문자열"; }

 

IntSupplier 인터페이스를 타겟 타입으로 하는 람다식의 경우에는 다음과 같습니다. 역시 return에 int 값을 리턴하도록 명시해야 합니다. 

 

IntSupplier supplier = () -> { ...; return intValue; }

 

 


 

다음 예제는 IntSupplier 인터페이스를 타겟 타입으로 하는데, 주사위의 숫자를 랜덤하게 제공하는 것을 목적으로 하는 코드입니다. 

 

public class ExampleMain {	
	public static void main(String[] args) {
		IntSupplier intSupplier = () -> {
			int num = (int)(Math.random() * 6) + 1;
			return num;
		};
		
		int numResult = intSupplier.getAsInt();
		System.out.println(numResult);
	}
}