programing

Google Guava vs.아파치 커먼즈

javaba 2022. 8. 1. 23:56
반응형

Google Guava vs.아파치 커먼즈

Java에서 양방향 맵 구현을 찾고 있었는데 우연히 다음 두 개의 라이브러리를 발견했습니다.

둘 다 무료이며, 내가 찾던 양방향 지도 구현(Apache의 BidiMap, Google의 BiMap)이 있으며, 놀랍게도 거의 같은 크기(Apache 493 kB, Google 499 kB)이며, 모든 면에서 나에게 꽤 비슷한 것 같다.

어떤 것을 선택해야 하며, 그 이유는 무엇입니까?다른 동등한 대안이 있습니까(무료이며 최소한 양방향 맵이 있어야 함)?저는 최신 Java SE를 사용하고 있기 때문에 Java 5 등으로 인위적으로 제한할 필요는 없습니다.

내 생각에 더 나은 선택은 구아바(구글 컬렉션으로 알려진)이다.

  • 좀 더 현대적인 (제너릭한)
  • Collections API 요건을 완전히 준수합니다.
  • 적극적으로 유지되고 있다
  • CacheBuilder 그리고 그 전작들은 정말 훌륭하다.

아파치 공용 모음은 좋은 도서관 잘 보였으나 오랫동안generics-enabled 버전(한 소장품 API에 대한 나의 의견에서 큰 문제점.)을 제공하고 일반적으로 최근 공용 징수 다시 약간의 증기를 선택했다는 maintenance/don't-do-too-much-work-on-it 모드에 잠긴 것 같지 못하고 있지만, 뭔가 얘기하고 있다...

다운로드 크기/메모리 풋프린트/코드 크기가 문제라면 Apache Commons Collections가 다른 라이브러리의 공통 종속성이기 때문에 더 나은 후보일 수 있습니다.따라서 사용자 자신의 코드로도 종속성을 추가하지 않고 사용할 수 있습니다.편집: 많은 새로운 라이브러리가 실제로 Apache Commons Collections가 아닌 Guava에 의존하고 있기 때문에 이 특별한 "장점"은 현재 부분적으로 전복되었습니다.

자주 묻는 질문: Google 컬렉션 FAQ

구글은 Apache Commons Collections를 개선할 수 있었는데 왜 이 모든 것을 만들었을까?

Apache Commons 컬렉션은 분명히 우리의 요구를 충족시키지 못했다.Generic을 사용하지 않기 때문에 코드로부터 컴파일 경고를 받는 것을 싫어하기 때문에 문제가 되고 있습니다.또, 오랫동안 「홀드 패턴」에 머무르고 있습니다.우리는 그것을 기꺼이 사용할 수 있을 때까지 고치는 데 상당한 투자가 필요하다는 것을 알 수 있었습니다. 그리고 그 사이에 우리의 도서관은 이미 유기적으로 성장하고 있었습니다.

Apache 라이브러리와 당사 라이브러리의 중요한 차이점은 컬렉션이 구현된 JDK 인터페이스에 의해 지정된 계약을 매우 충실하게 준수한다는 것입니다.Apache 문서를 검토하면 위반 사례가 셀 수 없이 많습니다.이러한 점을 명확하게 지적한 것은 칭찬받아 마땅하지만, 여전히 표준적인 수집 행동에서 벗어나는 것은 위험합니다!이러한 컬렉션에서는 항상 버그가 발생하기를 기다리고 있으므로 주의해야 합니다.

델의 컬렉션은 완전히 생성되어 계약을 위반하지 않습니다(단, JDK 구현은 허용 가능한 위반에 대한 강력한 선례를 남겼습니다).즉, 컬렉션을 기대하는 모든 방법으로 델의 컬렉션 중 하나를 전달할 수 있으며, 필요한 대로 동작할 수 있다는 확신을 가질 수 있습니다.

Google Collections를 시작할 수 있는 가장 중요한 요소:

  • 제네릭(제너릭을 사용하지 않는 컬렉션 -- FTL)
  • 컬렉션 프레임워크와의 일관성(Josh Bloch는 이 프레임워크의 주요 참가자)
  • 옳다.이들은 이 문제를 해결하기 위해 필사적으로 노력하고 있습니다. 이들은 약 25,000개의 유닛 테스트를 수행하며 API를 올바르게 사용하기 위해 노력하고 있습니다.

여기 주요 저자가 한 강연의 유튜브 동영상이 있습니다. 그리고 그는 이 도서관에 대해 알만한 가치가 있는 것에 대해 토론하는 것을 잘합니다.

다른 두 가지 (틀리지 않았으면 좋겠다)

  • Guava(구글 컬렉션의 새 이름)의 라이센스는 Apache License 2.0으로, Apache Commons 프로젝트와 동일합니다.
  • 다운로드하는 파일에서 Guava의 소스 코드를 찾을 수 없습니다(git-access만 가능한 것 같습니다).

Guava의 한 가지 불쾌한 점은 Multimap이 java.util을 확장하지 않는다는 것입니다.맵. 맵에서 동작하는 독자적인 메서드가 있으면 Guava Multimaps에서는 동작하지 않습니다(Appache MultiMap 인터페이스는 java.util을 확장합니다).지도) 이렇게 된 데는 그럴 만한 이유가 있겠지만 불편하기도 합니다.

언급URL : https://stackoverflow.com/questions/1444437/google-guava-vs-apache-commons

반응형