일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- dbeaver
- NORI
- redis
- Query
- mysql
- API
- 아이온큐
- file download
- Elastic
- ann
- IONQ
- Cache
- java
- TSLA
- 양자컴퓨터
- request cache
- aqqle
- Selenium
- 테슬라
- vavr
- aggs
- api cache
- JPA
- Elasticsearch
- Aggregation
- KNN
- Analyzer
- Docker
- java crawler
- elasticsearch cache
Archives
- Today
- Total
아빠는 개발자
[java] Vavr 란? 본문
728x90
반응형
Vavr는 Java에서 함수형 프로그래밍(FP)을 지원하는 라이브러리입니다.
이 라이브러리는 Java의 전통적인 객체 지향 프로그래밍 스타일을 보완하며, 함수형 프로그래밍 패러다임을 더 쉽게 구현할 수 있도록 도와줍니다. Vavr은 Java에서 부족한 함수형 프로그래밍 관련 기능을 제공하고, 불변성, 함수형 데이터 구조, 고차 함수, 패턴 매칭 등의 개념을 지원합니다.
주요 기능
- 함수형 데이터 구조: Vavr은 불변 컬렉션과 데이터 구조를 제공합니다. 예를 들어, List, Map, Set 등 Java 표준 라이브러리의 컬렉션들과 유사한 자료구조를 제공하지만, 이들은 모두 불변입니다. 불변성은 멀티스레드 환경에서 안전하게 사용할 수 있다는 장점이 있습니다.
- 옵셔널 타입: Java의 Optional 클래스와 유사한 Option 클래스를 제공합니다. 하지만 Vavr의 Option은 더 풍부한 메서드와 조합 가능성을 가지고 있어, 더욱 다양한 함수형 프로그래밍 패턴을 지원합니다.
Option<String> maybeValue = Option.of("Hello");String value = maybeValue.getOrElse("default"); - Try - 실패 안전한 연산: Try는 예외를 처리하는 함수형 방식의 대안입니다. 예외가 발생할 수 있는 코드를 Try로 감싸면, 예외를 명시적으로 처리하거나 기본값을 제공하는 등의 작업을 수행할 수 있습니다.
Try<Integer> result = Try.of(() -> Integer.parseInt("123"));
result.onSuccess(val -> System.out.println("Parsed: " + val))
.onFailure(ex -> System.out.println("Failed to parse")); - Either - 두 가지 가능성: Either는 두 가지 값을 표현할 수 있는 타입으로, 성공과 실패를 명확하게 처리하는 데 유용합니다. 일반적으로 Either는 왼쪽(Left)에 오류를, 오른쪽(Right)에 성공 값을 담습니다.
Either<String, Integer> result = Either.right(42);
result.peek(val -> System.out.println("Success: " + val))
.peekLeft(err -> System.out.println("Error: " + err)); - Tuple (튜플): Vavr은 다양한 크기의 튜플을 제공하여, 여러 개의 값을 묶어서 처리할 수 있게 해줍니다. Tuple2, Tuple3 등 다양한 크기의 튜플 클래스를 제공합니다.
Tuple2<String, Integer> person = Tuple.of("John", 30);
String name = person._1; // "John"
Integer age = person._2; // 30 - 고차 함수와 커링: Vavr은 함수를 값으로 취급하고, 함수를 반환하는 고차 함수를 지원합니다. 이로써 더 선언적이고, 재사용 가능한 코드를 작성할 수 있습니다.
Function2<Integer, Integer, Integer> sum = (a, b) -> a + b;
Function1<Integer, Integer> add5 = sum.curried().apply(5); - 패턴 매칭: Vavr은 switch 문보다 더 강력하고 표현력 있는 패턴 매칭 기능을 제공합니다. 이를 통해 조건부 로직을 더 명확하게 작성할 수 있습니다.
int result = Match(3).of( Case($(1), 1), Case($(2), 2), Case($(), 0) );
Vavr의 이점
- 불변성: 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
- 선언적 코드: 코드의 가독성과 유지 보수성을 향상시킵니다.
- 풍부한 API: Java에서 부족한 함수형 프로그래밍 기능을 보완해 줍니다.
- 에러 처리: 예외 처리와 오류 전파를 더욱 우아하게 다룰 수 있습니다.
결론
Vavr은 Java에서 함수형 프로그래밍을 더욱 쉽게 구현할 수 있도록 돕는 강력한 도구입니다. 함수형 데이터 구조, 에러 처리, 튜플, 패턴 매칭 등 다양한 기능을 통해, 기존의 Java 프로그래밍 스타일을 보완하고 함수형 프로그래밍 패턴을 도입할 수 있게 합니다.
728x90
반응형
'Java' 카테고리의 다른 글
[java] 멀티스레드 최적화 (java application batch) - 이론편 (1) | 2024.09.21 |
---|---|
[java] 함수형 프로그래밍(Functional Programming) 은? (0) | 2024.09.02 |
[java] package 에서 common 과 base 의 의미 (0) | 2024.06.11 |
[java] URL 호출해서 파일 다운로드 (InputStream) (0) | 2024.06.01 |
[java] Unix 타임스탬프 (0) | 2024.06.01 |