개념 설명
컬렉션 프레임워크는 데이터 군(群)을 저장하고 관리하는 자료구조들의 표준화된 설계입니다.
(자바스크립트의 배열과 객체를 더 체계적으로 분류한 것과 유사)
주요 인터페이스:
- List (JS의 Array와 유사): 순서가 있는 데이터 집합
- Set: 중복을 허용하지 않는 데이터 집합
- Map (JS의 Object와 유사): 키-값 쌍으로 이루어진 데이터 집합
비유 설명:
- List: 줄 서있는 사람들 (순서 있음)
- Set: 회원가입 명단 (중복 없음)
- Map: 사물함과 열쇠 (키-값 쌍)
사용 목적
- 데이터 구조의 표준화
- 재사용성 증가
- 프로그래밍 효율성 향상
- 데이터 관리의 일관성 확보
자주하는 실수
- 제네릭 타입 미지정
- 동기화 처리 미흡
- 부적절한 컬렉션 타입 선택
- 불필요한 객체 보관으로 인한 메모리 누수
주요 컬렉션 비교표
특성 | ArrayList | LinkedList | HashSet | HashMap |
---|---|---|---|---|
순서유지 | O | O | X | X |
중복허용 | O | O | X | 키:X/값:O |
검색성능 | 빠름 | 느림 | 빠름 | 빠름 |
삽입/삭제 | 느림 | 빠름 | 빠름 | 빠름 |
메모리효율 | 높음 | 낮음 | 보통 | 보통 |
실무 활용 예시
- 회원 목록 관리 (ArrayList)
- 최근 조회 이력 관리 (LinkedList)
- 중복 제거된 태그 관리 (HashSet)
- 캐시 데이터 저장 (HashMap)
- 우선순위 작업 대기열 (PriorityQueue)
- 멀티스레드 환경의 데이터 공유 (ConcurrentHashMap)
- 속성-값 매핑 (Properties)
- 이벤트 처리 순서 관리 (LinkedList)
추가 팁:
- 초기 용량 지정으로 성능 최적화
- 불변 컬렉션 사용으로 스레드 안전성 확보
- Stream API와 함께 사용하여 데이터 처리 효율화
- 컬렉션 생성 시 예상 크기를 고려한 초기화
List (목록)
- ArrayList, LinkedList 등
- 특징: 순서가 있고, 중복 허용
List<String> nameList = new ArrayList<>(); nameList.add("Kim"); // [Kim] nameList.add("Lee"); // [Kim, Lee] nameList.add("Kim"); // [Kim, Lee, Kim] - 중복 가능
Set (집합)
- HashSet, TreeSet 등
- 특징: 중복 불가, 순서 없음
Set<String> uniqueNames = new HashSet<>(); uniqueNames.add("Kim"); // [Kim] uniqueNames.add("Lee"); // [Kim, Lee] uniqueNames.add("Kim"); // [Kim, Lee] - 중복 안됨
Map (키-값 쌍)
- HashMap, TreeMap 등
- 특징: 키-값 쌍으로 저장, 키는 중복 불가
Map<String, Integer> ageMap = new HashMap<>(); ageMap.put("Kim", 25); // {Kim=25} ageMap.put("Lee", 30); // {Kim=25, Lee=30} ageMap.put("Kim", 26); // {Kim=26, Lee=30} - 키가 같으면 값 덮어씀
실제 사용 예시:
// 회원 목록 관리
List<Member> memberList = new ArrayList<>();
// 이메일 중복 체크
Set<String> emailSet = new HashSet<>();
// 회원 ID로 회원 정보 조회
Map<String, Member> memberMap = new HashMap<>();
이런 컬렉션들은 실무에서 정말 많이 사용되는데, 데이터를 어떻게 저장하고 관리할지에 따라 적절한 컬렉션을 선택해서 사용하면 됩니다!