본문 바로가기

WEB개발/JAVA

메서드 참조, function, consumer, supplier

메서드 참조 사용법

 

메서드 참조는 ClassName::methodName 형식으로 사용하며, 다음 네 가지 유형으로 나뉩니다:

 

1. Static 메서드 참조: ClassName::staticMethod

import java.util.function.Function;

public class StaticMethodReference {
    public static int square(int x) {
        return x * x;
    }

    public static void main(String[] args) {
        // 람다 표현식
        Function<Integer, Integer> squareLambda = x -> StaticMethodReference.square(x);

        // 메서드 참조
        Function<Integer, Integer> squareMethodRef = StaticMethodReference::square;

        System.out.println(squareMethodRef.apply(5)); // 출력: 25
    }
}

 

2.인스턴스 메서드 참조: instance::methodName

import java.util.function.Consumer;

public class InstanceMethodReference {
    public void printMessage(String message) {
        System.out.println(message);
    }

    public static void main(String[] args) {
        InstanceMethodReference instance = new InstanceMethodReference();

        // 람다 표현식
        Consumer<String> printLambda = msg -> instance.printMessage(msg);

        // 메서드 참조
        Consumer<String> printMethodRef = instance::printMessage;

        printMethodRef.accept("Hello, Method Reference!"); // 출력: Hello, Method Reference!
    }
}

 

3. 특정 클래스의 임의 객체 메서드 참조: ClassName::methodName

import java.util.Arrays;
import java.util.List;

public class ArbitraryObjectMethodReference {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 람다 표현식
        names.forEach(name -> System.out.println(name));

        // 메서드 참조
        names.forEach(System.out::println);
        // 출력:
        // Alice
        // Bob
        // Charlie
    }
}

 

4. 생성자 참조: ClassName::new

import java.util.function.Supplier;

public class ConstructorReference {
    public ConstructorReference() {
        System.out.println("Constructor called!");
    }

    public static void main(String[] args) {
        // 람다 표현식
        Supplier<ConstructorReference> constructorLambda = () -> new ConstructorReference();

        // 생성자 참조
        Supplier<ConstructorReference> constructorMethodRef = ConstructorReference::new;

        constructorMethodRef.get(); // 출력: Constructor called!
    }
}

 

 

1. Supplier

  • 역할: 값을 제공합니다. 입력은 받지 않고 값을 반환하는 역할을 합니다.
  • 메서드: T get()
    • 입력값이 없으며, 지정된 타입 T의 값을 반환합니다.
  • 주로 사용되는 상황:
    • Lazy evaluation (필요할 때 값을 생성).
    • 데이터 생성 시 사용.

 

2. Consumer

  • 역할: 값을 소비합니다. 하나의 입력값을 받고, 반환값은 없습니다.
  • 메서드: void accept(T t)
    • 입력값 T를 받아 작업을 수행하며 아무것도 반환하지 않습니다.
  • 주로 사용되는 상황:
    • 데이터를 소비하거나 처리할 때 사용.
    • 로깅, 데이터 출력, 이벤트 처리 등.

 

3. Function

  • 역할: 입력값을 받아 변환하거나 계산 결과를 반환합니다.
  • 메서드: R apply(T t)
    • 입력값 T를 받아 결과값 R을 반환합니다.
  • 주로 사용되는 상황:
    • 데이터 변환, 매핑, 계산.
    • Stream.map()과 같은 작업에서 사용.