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() 로 변환해야 하므로 경계를 명확히 하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.