PHpullh
학습 라이브러리/Java/Vavr 라이브러리 소개

JAVA · 함수형/Stream

Vavr 라이브러리 소개

Vavr(구 Javaslang)의 함수형 자료구조와 유틸리티를 소개합니다.

함수형/Stream고급VavrEitherTry함수형라이브러리

핵심 설명

Vavr(구 Javaslang)의 함수형 자료구조와 유틸리티를 소개합니다.

Java code

// Vavr 의존성: io.vavr:vavr:0.10.4
// 아래는 Vavr의 주요 기능을 의사코드로 소개합니다.

// 1. 불변 컬렉션
// io.vavr.collection.List (영속적 연결 리스트)
// var list = io.vavr.collection.List.of(1, 2, 3);
// var newList = list.prepend(0); // [0, 1, 2, 3]
// list는 여전히 [1, 2, 3] — 구조 공유

// 2. Option (Optional 대체)
// var opt = Option.of(value);
// var result = opt.map(v -> v * 2).getOrElse(0);

// 3. Try (예외를 값으로)
// var result = Try.of(() -> riskyOperation())
//     .recover(Exception.class, e -> fallback)
//     .getOrElse(defaultValue);

// 4. Either (왼쪽=에러, 오른쪽=성공)
// Either<String, Integer> parse(String s) {
//     try { return Either.right(Integer.parseInt(s)); }
//     catch (Exception e) { return Either.left("파싱 실패"); }
// }

// 5. Pattern Matching
// import static io.vavr.API.*;
// String result = Match(value).of(
//     Case($(1), "one"),
//     Case($(2), "two"),
//     Case($(), "other")
// );

// Java 표준으로 유사하게 구현
import java.util.function.*;

sealed interface Either<L, R> {
    record Left<L, R>(L value) implements Either<L, R> {}
    record Right<L, R>(R value) implements Either<L, R> {}

    static <L, R> Either<L, R> right(R value) { return new Right<>(value); }
    static <L, R> Either<L, R> left(L value) { return new Left<>(value); }
}

class Main {
    static Either<String, Integer> parseInt(String s) {
        try { return Either.right(Integer.parseInt(s)); }
        catch (Exception e) { return Either.left("파싱 실패: " + s); }
    }

    public static void main(String[] args) {
        var result = parseInt("42");
        switch (result) {
            case Either.Right<String, Integer> r -> System.out.println("성공: " + r.value());
            case Either.Left<String, Integer> l  -> System.out.println("실패: " + l.value());
        }
    }
}

학습 팁

Vavr는 Java에 부족한 함수형 자료구조를 제공합니다. 하지만 Java 21+의 sealed/record/패턴 매칭으로 많은 부분을 대체할 수 있습니다.

주의할 점

Vavr 컬렉션과 Java 표준 컬렉션은 호환되지 않습니다. .toJavaList()로 변환해야 하므로 경계를 명확히 하세요.

자주 묻는 질문

Vavr 라이브러리 소개란 무엇인가요?

Vavr(구 Javaslang)의 함수형 자료구조와 유틸리티를 소개합니다.

Vavr 라이브러리 소개 학습 시 주의할 점은 무엇인가요?

Vavr 컬렉션과 Java 표준 컬렉션은 호환되지 않습니다. .toJavaList() 로 변환해야 하므로 경계를 명확히 하세요.