Java 8에서 도입된 Supplier의 사용 방법 및 예제를 소개합니다.
1. Supplier
Supplier는 인자를 받지 않고 Type T 객체를 리턴하는 함수형 인터페이스입니다.
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
2. Supplier 사용 방법
아래 예제는 "HelloWorld"
라는 문자열을 리턴하는 Supplier 구현하여 사용하는 예제입니다.
Supplier는 람다식으로 구현할 수 있으며, Supplier.get()
을 호출하면 구현 내용이 수행되면서 결과가 리턴됩니다.
import java.util.function.Supplier;
public class SupplierExample1 {
public static void main(String[] args) {
Supplier<String> supplier= ()-> "HelloWorld";
String result = supplier.get();
System.out.println(result);
}
}
Output:
HelloWorld
3. Custom 클래스와 함께 사용하는 Supplier 예제
Item이라는 커스텀 클래스를 정의하였고, Supplier에서 이 클래스의 객체를 리턴하는 예제입니다.
Supplier 클래스는 Generics로 구현되어 어떤 클래스의 객체도 리턴할 수 있습니다.
import java.util.function.Supplier;
public class Example {
public static void main(String[] args) {
Supplier<Item> supplier= ()-> new Item(10, "Hello");
Item result = supplier.get();
System.out.println(result.getId() + ", " + result.getValue());
}
public static class Item {
private int id;
private String value;
public Item(int id, String value) {
this.id = id;
this.value = value;
}
public int getId() {
return id;
}
public String getValue() {
return value;
}
}
}
Output:
10, Hello
4. 메소드 레퍼런스와 함께 사용하는 Supplier 예제
Method reference를 사용하여 Supplier를 구현할 수 있습니다.
아래 예제에서 인자를 받지 않고 String의 객체를 리턴하는 메소드 getHelloWorld()
를 정의하였습니다.
이 메소드를 메소드 레퍼런스로 표현하면 SupplierExample3::getHelloWorld
가 됩니다.
이 표현을 다시 람다식으로 표현해보면 () -> getHelloWorld()
가 됩니다.
import java.util.function.Supplier;
public class SupplierExample3 {
public static void main(String[] args) {
Supplier<String> supplier= SupplierExample3::getHelloWorld;
String result = supplier.get();
System.out.println(result);
}
public static String getHelloWorld() {
return "Hello World";
}
}
Output:
Hello World
5. Primitive 타입에 대한 Supplier
자바는 기본적으로 Primitive 타입에 대한 Supplier 클래스를 제공합니다.
- BooleanSupplier
- IntSupplier
- LongSupplier
- DoubleSupplier
다음과 같이 사용할 수 있습니다. get()
대신에 getAsInt()
같은 함수를 사용하네요.
import java.util.function.*;
public class SupplierExample4 {
static String hello = "hello";
public static void main(String[] args) {
BooleanSupplier booleanSupplier = () -> hello.equals("world");
IntSupplier intSupplier = () -> hello.length();
LongSupplier longSupplier = () -> hello.length();
DoubleSupplier doubleSupplier = () -> 12.34 - hello.length();
System.out.println(booleanSupplier.getAsBoolean());
System.out.println(intSupplier.getAsInt());
System.out.println(longSupplier.getAsLong());
System.out.println(doubleSupplier.getAsDouble());
}
}
Output:
false
5
5
7.34
6. Stream.generate()에서 Supplier 사용
Stream.generate()
는 Supplier를 인자로 받아, 무한한 Stream을 생성합니다. 예제에서는 Random 숫자를 리턴하는 Supplier를 정의하였습니다.
limit(5)
는 Stream을 5개로 제한하는 코드이고, forEach(System.out::println)
는 Loop를 돌면서 객체를 출력합니다.
import java.util.Random;
import java.util.function.*;
import java.util.stream.Stream;
public class SupplierExample5 {
public static void main(String[] args) {
Supplier<Integer> randomNumbersSupplier = () -> new Random().nextInt(100);
Stream.generate(randomNumbersSupplier)
.limit(5)
.forEach(System.out::println);
}
}
Output:
32
57
11
10
91
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기