자바 개발자가 반복 코드를 덜 쓰게 하는 구글의 핵심 라이브러리
자바 프로젝트에서 매번 새로 작성하던 컬렉션이나 문자열 처리 코드를 줄이고 싶다면, 구글이 내부에서 사용해 온 도구들을 한 번에 가져다 쓸 수 있습니다. Guava는 자바 표준 라이브러리가 다루지 않는 다중 맵, 불변 컬렉션, 그래프 처리 등을 지원하는 핵심 라이브러리 모음입니다. JDK 1.8 이상 환경이나 안드로이드 앱에서 바로 의존성을 추가해 사용할 수 있습니다.
자바 표준 라이브러리의 빈틈을 메우는 도구들
Guava는 기존 자바 컬렉션이 다루기 어려웠던 다중 맵(multimap)과 다중 집합(multiset) 같은 새로운 컬렉션 타입을 제공합니다. 데이터가 변경되지 않도록 보장하는 불변 컬렉션과 그래프 처리를 위한 전용 라이브러리도 포함합니다. 동시성, 입출력, 해싱, 기본형, 문자열 처리 등 자바 개발에서 자주 마주치는 영역의 유틸리티를 폭넓게 지원합니다. 구글은 대부분의 자바 프로젝트에서 이 라이브러리를 사용하며, 다른 많은 회사에서도 널리 쓰이고 있습니다.
JRE와 안드로이드용 두 가지 버전
사용 환경에 따라 JRE 버전과 안드로이드 버전으로 나뉩니다. JRE 버전은 JDK 1.8 이상을 요구하며, 일반적인 자바 애플리케이션에 적합합니다. 안드로이드 개발을 하거나 안드로이드 호환성이 필요한 라이브러리를 만드는 경우엔 안드로이드 버전을 사용해야 합니다. 두 버전은 Maven 버전 필드에서 -jre 또는 -android로 구분됩니다. 현재 최신 버전은 33.7.1이며, Maven과 Gradle 모두에서 의존성을 추가할 수 있습니다.
API 안정성과 변경 사항 관리
Guava는 API의 안정성을 명확히 구분합니다. @Beta 어노테이션이 붙은 API는 언제든 변경되거나 삭제될 수 있으므로, 외부에서 사용하는 라이브러리라면 재포장(repackage)을 하지 않는 한 사용을 피해야 합니다. 반면 @Beta가 없는 API는 이진 호환성을 무기한 유지하며, 비추천(@Deprecated) 상태여도 삭제되지 않습니다. 마지막에 비-@Beta API를 삭제한 버전은 21.0이었으며, 이후로는 삭제 계획이 없습니다. 다만 심각한 보안 문제와 같은 예외적인 상황에서는 옵션을 열어두었습니다.
사용 전 반드시 확인할 사항
Guava 객체의 직렬화 형태는 명시적으로 보장되지 않는 경우를 제외하고 언제든 변경될 수 있으므로, 장기적인 데이터 저장 목적으로 직렬화 형태를 의존하지 않는 것이 좋습니다. 또한 이 클래스들은 악의적인 호출자를 방어하도록 설계되지 않았으므로, 신뢰할 수 있는 코드와 신뢰할 수 없는 코드 간의 통신에는 사용하지 않아야 합니다. 메인라인 버전은 Linux와 Windows의 다양한 OpenJDK 버전에서 테스트되지만, com.google.common.io 패키지의 일부 기능은 비-Linux 환경에서 제대로 동작하지 않을 수 있습니다. 안드로이드 버전은 API 레벨 24(Nougat)에서 단위 테스트가 수행됩니다. 런타임 링크에 필요한 유일한 의존성은 com.google.guava:failureaccess:1.0.3입니다.