고차원 함수
고차원 함수란 하나 이상의 함수를 인수로 받아서 함수를 결과로 반환하는 함수를 의미한다. 우리가 앞에서 배웠던 Comparator.comparing도 "Comparator<Apple> c = comparing(Apple::getWeight);" 처럼 비교의 기준이 되는 함수를 입력받아서 새로운 함수를 반환하는 고차원 함수 중 하나이다.
커링
커링이란 x, y라는 두개의 인수를 받는 함수를 한개의 인수를 갖는 g라는 함수로 대체하는 것을 말한다. (ex. f(x, y) = (g(x))(y)). 자바에서는 따로 커링이라는 기능을 제공하지는 않지만, 커링이라는 개념을 구현할 수는 있다.
static double converter(double x, double f, double b) {
return x * f + b;
}
static DoubleUnaryOperator curriedConverter(double f, dobule b){
return (double x) -> x * f + b;
}
DoubleUnaryOperator convertCtoF = curriedConverter(9.0/5, 32);
double f = convertCtoF.applyAsDouble(100);
영속 자료구조
영속이란 저장된 값이 다른 누군가에 의해 영향을 받지 않는 상태를 의미한다. 예를 들어서, 인자로 입력받은 리스트의 특정 값을 업데이트 하는 함수가 있다고 했을 때, 인자로 입력받은 리스트를 갱신하는 것은 파괴적인 갱신으로 영속적이지 않은 것이다. 우리는 이렇게 업데이트를 해야 할 필요가 있을 때, 기존의 자료구조를 갱신하지 않고 새로운 자료구조를 만듦으로써 영속을 달성할 수 있다.
스트림과 게으른 평가
스트림의 경우, 단 한번만 소비할 수 있다는 제약 사항이 있다. 그래서 스트림은 재귀적으로 사용할 수 없다는 제약사항이 있다. 그래서 우리는 게으른 평가를 이용해서 이 문제를 해결할 수 있는데, 스칼라에서는 이런 기능을 따로 제공하지만 자바에서는 따로 기능으로 제공하지는 않으며 우리가 직접 구현해서 이를 사용할 수 있다. 게으른 평가는 여러면에서 장점을 제공하지만, 항상 성능이 더 좋다고 말하기는 어렵다. 따라서 상황에 맞게 활용하는 것이 중요하다.
패턴 매칭
패턴매칭이란 임의의 객체가 특정 패턴(모양, 타입, 값 등)을 만족하는지 확인하는 것이다. 예를 들어 a가 A타입인가? a는 값이 10인가? 등을 확인하는 것이 패턴매칭이라고 할 수 있다.
🔍 Java 패턴 매칭(Pattern Matching)이란? 쉽게 이해하는 가이드
💡 **Java의 패턴 매칭(Pattern Matching)**은 객체의 타입을 검사하고 해당 타입에 맞게 변수를 선언하는 기능입니다.Java 21에서는 switch 문에서도 패턴 매칭을 사용할 수 있게 되면서 코드를 더 간결하
kimseungjae.tistory.com
'자바' 카테고리의 다른 글
[모던 자바 인 액션] 결론 그리고 자바의 미래 (0) | 2025.05.29 |
---|---|
[모던 자바 인 액션] OOP와 FP의 조화: 자바와 스칼라 비교 (0) | 2025.05.29 |
[모던 자바 인 액션] 함수형 관점으로 생각하기 (0) | 2025.05.28 |
[모던 자바 인 액션] 자바 모듈 시스템 (0) | 2025.05.09 |
[모던 자바 인 액션] 디폴트 메서드 (0) | 2025.05.08 |