Spring 7기 프로젝트/모임 플렛폼 프로젝트
List.containsAll() vs HashSet.containsAll() 성능 비교
JuNo_12
2025. 7. 24. 15:23
문제 상황
사용자가 선택한 카테고리 ID들이 모두 유효한 카테고리인지 검증하는 로직에서 다음과 같은 코드를 작성했습니다.
boolean allValid = validCategoryIds.containsAll(categoryIds);
이때 IDE에서 "Call to 'list.containsAll(collection)' may have poor performance" 경고가 발생했습니다.
성능 차이 분석
List.containsAll() 방식:
- 시간복잡도: O(n*m)
- categoryIds의 각 요소마다 validCategoryIds 전체를 순차 탐색
- 카테고리 수가 늘어날수록 성능이 급격히 저하
HashSet.containsAll() 방식:
- 시간복잡도: O(n+m)
- HashSet 생성 비용 O(n) + 해시 기반 조회 O(m)
- 카테고리 수가 늘어나도 안정적인 성능
최종 해결책

현재는 카테고리 수가 적지만, 서비스 확장을 고려하여 처음부터 효율적인 자료구조를 선택했습니다. 약간의 코드 복잡성 증가가 있지만, 확장성과 성능 안정성을 확보할 수 있습니다.