Function의 합성 (Function Composition)
Function의 합성은 두 개 이상의 함수를 연결하여 새로운 함수를 생성하는 과정
기존의 함수를 조합하여 새로운 함수를 만든다.
f(x)와 g(x) -> f(g(x))
andThen
두 함수를 연결하는 역할
번째 함수를 적용하고 그 결과를 두 번째 함수의 입력으로 전달
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// 두 함수를 정의
Function<Integer, Integer> multiplyBy2 = x -> x * 2;
Function<Integer, Integer> add3 = x -> x + 3;
// 두 함수를 연결하여 새로운 함수 생성
Function<Integer, Integer> composedFunction = multiplyBy2.andThen(add3);
// 연결된 함수를 사용하여 연산 수행
int result = composedFunction.apply(5);
System.out.println("Result: " + result); // Output: 13
}
}
compose
먼저 두 번째 함수를 적용하고 그 결과를 첫 번째 함수의 입력으로 전달
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// 두 함수를 정의
Function<Integer, Integer> multiplyBy2 = x -> x * 2;
Function<Integer, Integer> add3 = x -> x + 3;
// 두 함수를 연결하여 새로운 함수 생성
Function<Integer, Integer> composedFunction = multiplyBy2.compose(add3);
// 연결된 함수를 사용하여 연산 수행
int result = composedFunction.apply(5);
System.out.println("Result: " + result); // Output: 16
}
}
identity
함수를 합성할 때 기본적인 역할
인자로 받은 값을 그대로 반환
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// 항등 함수 생성
Function<Integer, Integer> identityFunction = Function.identity();
// 항등 함수를 사용하여 연산 수행
int result = identityFunction.apply(5);
System.out.println("Result: " + result); // Output: 5
}
}
Predicate의 결합 (Predicate Composition)
Predicate의 결합은 여러 개의 Predicate를 조합하여 하나의 Predicate를 생성하는 것
여러 조건을 하나로 결합하여 복잡한 조건을 간단하게 표현한다.
p1(x)와 p2(x) -> p1(x) AND p2(x) 또는 p1(x) OR p2(x)
and
Predicate와 다른 Predicate를 AND로 조합
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
// 두 개의 Predicate를 생성
Predicate<Integer> isEven = x -> x % 2 == 0;
Predicate<Integer> isPositive = x -> x > 0;
// 두 Predicate를 AND로 조합하여 새로운 Predicate 생성
Predicate<Integer> isEvenAndPositive = isEven.and(isPositive);
// 조합된 Predicate를 이용하여 조건 검사
System.out.println("Is 6 even and positive? " + isEvenAndPositive.test(6)); // Output: true
System.out.println("Is -3 even and positive? " + isEvenAndPositive.test(-3)); // Output: false
}
}
or
현재 Predicate와 다른 Predicate를 OR로 조합
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
// 두 개의 Predicate를 생성
Predicate<Integer> isEven = x -> x % 2 == 0;
Predicate<Integer> isPositive = x -> x > 0;
// 두 Predicate를 OR로 조합하여 새로운 Predicate 생성
Predicate<Integer> isEvenOrPositive = isEven.or(isPositive);
// 조합된 Predicate를 이용하여 조건 검사
System.out.println("Is 6 even or positive? " + isEvenOrPositive.test(6)); // Output: true
System.out.println("Is -3 even or positive? " + isEvenOrPositive.test(-3)); // Output: true
}
}
negate
현재 Predicate의 결과를 반전시킨 새로운 Predicate를 반환
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
// 하나의 Predicate를 생성
Predicate<Integer> isEven = x -> x % 2 == 0;
// Predicate의 결과를 반전시킨 새로운 Predicate 생성
Predicate<Integer> isNotEven = isEven.negate();
// 반전된 Predicate를 이용하여 조건 검사
System.out.println("Is 6 not even? " + isNotEven.test(6)); // Output: false
}
}
isEqual
현재 Predicate의 입력 값과 주어진 값이 동일한지를 검사하는 새로운 Predicate를 반환
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
// 하나의 Predicate를 생성
Predicate<String> isHello = Predicate.isEqual("Hello");
// Predicate를 이용하여 조건 검사
System.out.println("Is it Hello? " + isHello.test("Hello")); // Output: true
System.out.println("Is it Hello? " + isHello.test("Hi")); // Output: false
}
}