JAVA · 람다/메서드
커링(Currying)과 부분 적용
다중 인자 함수를 단일 인자 함수 체인으로 변환하는 커링 패턴입니다.
람다/메서드고급currying커링부분적용Function
핵심 설명
다중 인자 함수를 단일 인자 함수 체인으로 변환하는 커링 패턴입니다.
Java code
import java.util.function.*;
public class Currying {
// 커링: (a, b) -> r 을 a -> (b -> r)로 변환
static <A, B, R> Function<A, Function<B, R>> curry(
BiFunction<A, B, R> f) {
return a -> b -> f.apply(a, b);
}
// 부분 적용: 첫 번째 인자 고정
static <A, B, R> Function<B, R> partial(
BiFunction<A, B, R> f, A a) {
return b -> f.apply(a, b);
}
public static void main(String[] args) {
// 일반 BiFunction
BiFunction<String, String, String> greet =
(greeting, name) -> greeting + ", " + name + "!";
// 커링
Function<String, Function<String, String>> curriedGreet =
curry(greet);
Function<String, String> sayHello = curriedGreet.apply("Hello");
System.out.println(sayHello.apply("Alice")); // Hello, Alice!
System.out.println(sayHello.apply("Bob")); // Hello, Bob!
// 부분 적용
Function<String, String> hiGreet = partial(greet, "Hi");
System.out.println(hiGreet.apply("Charlie")); // Hi, Charlie!
// 수학 예시
BiFunction<Double, Double, Double> power = Math::pow;
Function<Double, Double> square = partial(power, 2.0);
Function<Double, Double> cube = partial(power, 3.0);
// 주의: Math.pow(base, exp)이므로 partial은 base를 고정
}
}학습 팁
커링은 설정 패턴에 유용합니다. 데이터베이스 연결이나 로거 등 공통 인자를 먼저 바인딩하면 코드가 깔끔해집니다.
주의할 점
Java의 타입 시스템이 복잡해서 3개 이상의 인자 커링은 가독성이 떨어집니다. 2개까지만 사용하고 그 이상은 객체로 묶으세요.
자주 묻는 질문
커링(Currying)과 부분 적용란 무엇인가요?
다중 인자 함수를 단일 인자 함수 체인으로 변환하는 커링 패턴입니다.
커링(Currying)과 부분 적용 학습 시 주의할 점은 무엇인가요?
Java의 타입 시스템이 복잡해서 3개 이상의 인자 커링은 가독성이 떨어집니다. 2개까지만 사용하고 그 이상은 객체로 묶으세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.