Google Guava - Java 유틸리티 라이브러리
Guava는 Google에서 개발한 Java 기반의 오픈소스 라이브러리입니다. 컬렉션, 캐싱, 문자열 처리, I/O 등 다양한 유틸리티를 제공합니다.
참고 자료
Guava의 장점
- 표준화 - Google에서 관리하는 표준 라이브러리
- 효율성 - Java 표준 라이브러리의 빠르고 효율적인 확장
- 최적화 - 고도로 최적화된 라이브러리
- 함수형 프로그래밍 - Java에 함수형 처리 기능 추가
- 유틸리티 - 애플리케이션 개발에 필요한 다양한 유틸리티 클래스
- 검증 - 표준 failsafe 검증 메커니즘 제공
- 모범 사례 - 모범 사례 강조
String 처리
Joiner
컬렉션을 문자열로 결합합니다.
System.out.println(Joiner.on(",")
.skipNulls()
.join(Arrays.asList(1,2,3,4,5,null,6)));
// 출력: 1,2,3,4,5,6
Splitter
문자열을 분리합니다.
System.out.println(Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split("the ,quick, ,brown, fox, jumps, over, the, lazy, little dog."));
CharMatcher
문자를 매칭하고 처리합니다.
// 공백 정리
System.out.println(CharMatcher.WHITESPACE.trimAndCollapseFrom(" Mahesh Parashar ", ' '));
// 숫자를 *로 대체
System.out.println(CharMatcher.JAVA_DIGIT.replaceFrom("mahesh123", "*"));
// 숫자와 소문자만 유지
System.out.println(CharMatcher.JAVA_DIGIT.or(CharMatcher.JAVA_LOWER_CASE).retainFrom("mahesh123"));
CaseFormat
네이밍 컨벤션을 변환합니다.
System.out.println(CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, "test-data"));
// 출력: testData
System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "test_data"));
// 출력: testData
System.out.println(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "test_data"));
// 출력: TestData
Collections
BiMap
value도 중복되지 않는 Map입니다.
Table
row, column, value로 구성된 테이블 자료구조입니다.
// Table<R,C,V> == Map<R,Map<C,V>>
Table<String, String, String> employeeTable = HashBasedTable.create();
// 데이터 추가
employeeTable.put("IBM", "101", "Mahesh");
employeeTable.put("IBM", "102", "Ramesh");
employeeTable.put("Microsoft", "111", "Sohan");
// row로 조회
Map<String, String> ibmEmployees = employeeTable.row("IBM");
// column으로 조회
Map<String, String> employerMap = employeeTable.column("102");
// 모든 row key 조회
Set<String> employers = employeeTable.rowKeySet();
LoadingCache
자동 로딩 기능이 있는 캐시입니다.
LoadingCache<String, Employee> employeeCache =
CacheBuilder.newBuilder()
.maximumSize(100) // 최대 100개 레코드
.expireAfterAccess(30, TimeUnit.MINUTES) // 30분 후 만료
.build(new CacheLoader<String, Employee>() {
@Override
public Employee load(String empId) throws Exception {
// 비용이 큰 호출
return getFromDatabase(empId);
}
});
// 첫 호출시 데이터베이스에서 로드
System.out.println(employeeCache.get("100"));
// 두번째 호출시 캐시에서 반환
System.out.println(employeeCache.get("100"));
Ordering
정렬 관련 유틸리티입니다.
// 생성
Ordering ordering = Ordering.natural();
Ordering ordering = Ordering.from(comparator);
// 사용
Collections.sort(numbers, ordering);
ordering.isOrdered(numbers); // 정렬되었는지 체크
ordering.min(numbers);
ordering.max(numbers);
ordering.reverse();
ordering.nullsFirst();
Range
범위를 표현합니다.
// [a,b] = { x | a <= x <= b}
Range<Integer> range1 = Range.closed(0, 9);
// (a,b) = { x | a < x < b}
Range<Integer> range2 = Range.open(0, 9);
// (a,b] = { x | a < x <= b}
Range<Integer> range3 = Range.openClosed(0, 9);
// [a,b) = { x | a <= x < b}
Range<Integer> range4 = Range.closedOpen(0, 9);
// (9, infinity)
Range<Integer> range5 = Range.greaterThan(9);
// 포함 여부 확인
range1.contains(5);
range1.containsAll(Ints.asList(1, 2, 3));
// 경계 확인
range1.lowerEndpoint();
range1.upperEndpoint();
range5.hasUpperBound();
// 범위 관계
range1.encloses(range6); // 포함 관계
range1.isConnected(range7); // 연결 여부
// 교집합, 합집합
range1.intersection(range8);
range1.span(range8);
Primitive Utilities
다양한 원시타입 유틸리티를 제공합니다.
Ints,Bytes,Chars등IntMath,LongMath- Math는 double/float으로 처리하기 때문에 int 값은 처리가 느립니다.
Throwables
예외 처리 유틸리티입니다.
Throwables.getStackTraceAsString(e)
Comments