WEB개발/JAVA
메서드 참조, function, consumer, supplier
wooyeon06
2024. 12. 18. 15:23
메서드 참조 사용법
메서드 참조는 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()과 같은 작업에서 사용.