본문 바로가기
Language/JAVA

[JAVA] Supplier<T> 인터페이스

by jepa 2023. 8. 22.
728x90
SMALL

Supplier 인터페이스는 Java 8부터 추가된 함수형 인터페이스(Functional Interface) 중 하나로서,

데이터 공급자 역할을 수행하는 함수를 나타냅니다.

 

Supplier 인터페이스의 메소드인 get()은 매개변수를 받지 않고, 데이터 값을 반환합니다.

즉, 파라미터를 받지 않고 값을 리턴하는 메서드를 나타내기 위해 사용됩니다.

 

Supplier는 다양한 기능과 유연성을 제공하며,

람다 표현식 및 스트림 API와 함께 사용하여 코드를 간결하고 가독성 좋게 작성할 수 있습니다.

package java.util.function;

@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

이 인터페이스의 단일 추상 메서드인 get()은 매개변수를 받지 않고 T 타입의 객체를 반환합니다.

 

간단한 예제 코드

import java.util.function.Supplier;

public class SupplierExample {
    public static void main(String[] args) {
        // 문자열을 반환하는 Supplier
        Supplier<String> supplier = () -> "Hello World!";

        String result = supplier.get();
        System.out.println(result);  // 출력: Hello World!

        // 랜덤한 정수 값을 반환하는 Supplier
        Supplier<Integer> randomIntSupplier = () -> (int)(Math.random() * 100);

        int randomNumber = randomIntSupplier.get();
        System.out.println(randomNumber);  // 출력: 임의의 0부터 99까지의 정수 값

    }
}

위 코드에서 supplier와 randomIntSupplier는 각각 String과 Integer 값을 반환하기 위해 사용되었습니다.

get() 메서드 호출을 통해 실제 값을 얻을 수 있습니다.

 

사용 예시 코드

import java.util.function.Supplier;

public class SupplierExample {
    public static void main(String[] args) {
        String result = process(() -> "Hello, World!");
        System.out.println(result);

        int randomNumber = generateRandomNumber(() -> (int) (Math.random() * 100));
        System.out.println(randomNumber);
    }

    // Supplier<T>를 매개변수로 받는 메소드의 예시
    public static <T> T process(Supplier<T> supplier) {
        return supplier.get();
    }

    // 랜덤한 숫자를 생성하는 메소드의 예시
    public static int generateRandomNumber(Supplier<Integer> supplier) {
        return supplier.get();
    }
}

위의 예시 코드에서 process 메소드는 Supplier 인터페이스를 매개변수로 받고, 해당 Supplier 객체의 get() 메소드를 호출하여 결과값을 반환합니다.

 

이 경우에는 "Hello, World!" 문자열이 출력됩니다.

또한, generateRandomNumber 메소드는 Integer 타입을 반환하는 Supplier<Integer> 인터페이스를 매개변수로 받으며, 해당 Supplier 객체의 get() 메소드 호출을 통해 랜덤한 숫자가 생성되어 반환됩니다.

 

사용될 수 있는 곳

  1. 지연 로딩 (Lazy Loading)
    객체 생성이나 데이터 가져오기 등의 작업을 필요한 시점에 실행하고 싶은 경우,
    Supplier<T>를 사용하여 해당 작업을 래핑할 수 있습니다.
    그러면 필요한 때까지 작업이 실행되지 않으며, 필요할 때마다 호출하여 결과 값을 얻을 수 있습니다.
  2. 람다 표현식
    Supplier<T>는 람다 표현식으로도 많이 활용됩니다.
    예를 들어, () -> "Hello World"와 같은 형태로 문자열 "Hello World"를 제공하는 Supplier 구현체를 만들 수 있습니다.
  3. 메서드 참조
    *
    메서드 참조(Method Reference) 역시 Supplier와 함께 자주 사용됩니다.
    예를 들어, String::new는 String 클래스의 기본 생성자(new)에 대한 메서드 참조로써, 문자열 객체의 공급자(Supplier) 역할을 할 수 있습니다.
728x90
LIST