아빠는 개발자

[java] Vavr 란? 본문

Java

[java] Vavr 란?

father6019 2024. 9. 2. 21:56
728x90
반응형

Vavr는 Java에서 함수형 프로그래밍(FP)을 지원하는 라이브러리입니다.

이 라이브러리는 Java의 전통적인 객체 지향 프로그래밍 스타일을 보완하며, 함수형 프로그래밍 패러다임을 더 쉽게 구현할 수 있도록 도와줍니다. Vavr은 Java에서 부족한 함수형 프로그래밍 관련 기능을 제공하고, 불변성, 함수형 데이터 구조, 고차 함수, 패턴 매칭 등의 개념을 지원합니다.

주요 기능

  1. 함수형 데이터 구조: Vavr은 불변 컬렉션과 데이터 구조를 제공합니다. 예를 들어, List, Map, Set 등 Java 표준 라이브러리의 컬렉션들과 유사한 자료구조를 제공하지만, 이들은 모두 불변입니다. 불변성은 멀티스레드 환경에서 안전하게 사용할 수 있다는 장점이 있습니다.
  2. 옵셔널 타입: Java의 Optional 클래스와 유사한 Option 클래스를 제공합니다. 하지만 Vavr의 Option은 더 풍부한 메서드와 조합 가능성을 가지고 있어, 더욱 다양한 함수형 프로그래밍 패턴을 지원합니다.
     
    Option<String> maybeValue = Option.of("Hello");
    String value = maybeValue.getOrElse("default");
  3. 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"));
  4. 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));
  5. Tuple (튜플): Vavr은 다양한 크기의 튜플을 제공하여, 여러 개의 값을 묶어서 처리할 수 있게 해줍니다. Tuple2, Tuple3 등 다양한 크기의 튜플 클래스를 제공합니다.
     
    Tuple2<String, Integer> person = Tuple.of("John", 30);
    String name = person._1; // "John"
    Integer age = person._2; // 30
  6. 고차 함수와 커링: Vavr은 함수를 값으로 취급하고, 함수를 반환하는 고차 함수를 지원합니다. 이로써 더 선언적이고, 재사용 가능한 코드를 작성할 수 있습니다.

    Function2<Integer, Integer, Integer> sum = (a, b) -> a + b;
    Function1<Integer, Integer> add5 = sum.curried().apply(5);
  7. 패턴 매칭: Vavr은 switch 문보다 더 강력하고 표현력 있는 패턴 매칭 기능을 제공합니다. 이를 통해 조건부 로직을 더 명확하게 작성할 수 있습니다.
     
    int result = Match(3).of( Case($(1), 1), Case($(2), 2), Case($(), 0) );

Vavr의 이점

  • 불변성: 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
  • 선언적 코드: 코드의 가독성과 유지 보수성을 향상시킵니다.
  • 풍부한 API: Java에서 부족한 함수형 프로그래밍 기능을 보완해 줍니다.
  • 에러 처리: 예외 처리와 오류 전파를 더욱 우아하게 다룰 수 있습니다.

결론

Vavr은 Java에서 함수형 프로그래밍을 더욱 쉽게 구현할 수 있도록 돕는 강력한 도구입니다. 함수형 데이터 구조, 에러 처리, 튜플, 패턴 매칭 등 다양한 기능을 통해, 기존의 Java 프로그래밍 스타일을 보완하고 함수형 프로그래밍 패턴을 도입할 수 있게 합니다.

728x90
반응형