컬렉션 프레임워크 딥다이브
컬렉션 프레임워크
데이터를 담는 자료구조를 "내부가 어떻게 생겼는지"까지 이해하고 상황에 맞게 고른다. 이 레슨을 끝내면 ArrayList/HashMap/TreeMap의 내부 동작과 시간 복잡도를 설명하고, 중복 제거·그룹핑·LRU 캐시 같은 실무 문제를 컬렉션으로 풀 수 있다.
1. 왜 배우는가
실무 Java 코드의 대부분은 "컬렉션에 데이터를 넣고, 꺼내고, 걸러내고, 집계하는" 일이다. DB에서 조회한 주문 목록은 List<Order>, 상품 ID로 상품을 찾는 캐시는 Map<Long, Product>, 중복 없는 태그 집합은 Set<String>. 어떤 컬렉션을 쓰느냐에 따라 같은 코드가 1ms에 끝나기도, 10초가 걸리기도 한다.
"리스트에서 contains로 확인하면서 10만 건을 돌렸더니 타임아웃이 났다"는 이야기는 흔하다. List.contains가 O(n)이고 Set.contains가 O(1)이라는 것을 알면 한 줄 바꿔서 해결되는 문제다.
컬렉션 프레임워크는 인터페이스(List, Set, Map)와 구현체(ArrayList, HashSet, HashMap)로 나뉘어 있다. 앞 레슨에서 배운 인터페이스 설계의 교과서적 사례이며, 동시에 hashCode/equals 규약이 실제로 어디에 쓰이는지 보여 주는 곳이다.
HashMap이 내부적으로 hashCode로 버킷을 찾고 equals로 키를 비교한다는 것을 알면, 왜 equals만 오버라이딩하면 안 되는지가 "규칙"이 아니라 "당연한 결과"가 된다.
또한 컬렉션은 면접의 핵심 주제다. "ArrayList와 LinkedList의 차이", "HashMap의 동작 원리", "HashMap과 HashTable, ConcurrentHashMap의 차이"는 거의 모든 Java 면접에서 나온다. 이 레슨은 그 답을 외우는 게 아니라 내부 구조에서 도출할 수 있게 한다.