컬렉션 프레임워크(클래스+인터페이스)
컬렉션 프레임워크는 데이터를 효율적으로 저장하고 조작하기 위해 자바에서 제공하는 클래스와 인터페이스의 집합입니다. 데이터를 저장할 자료구조와 이를 처리하는 알고리즘을 제공하여 코드의 재사용성과 유지보수성을 높이는 것이 목적입니다.
컬렉션 프레임워크의 계층 구조
java.util.Collection
├── List
│ ├── ArrayList
│ ├── LinkedList
│ └── Vector
├── Set
│ ├── HashSet
│ ├── LinkedHashSet
│ └── TreeSet
java.util.Map
├── HashMap
├── LinkedHashMap
└── TreeMap
컬렉션 프레임워크의 구성 요소
- 인터페이스(Interface)
- 컬렉션의 동작을 정의.
- 주요 인터페이스:
- Collection: 컬렉션의 기본 인터페이스.
- List: 순서가 있는 데이터의 집합.
- Set: 중복이 없는 데이터의 집합.
- Map: 키-값 쌍의 데이터 집합.
- 클래스(Class)
- 인터페이스를 구현한 클래스.
- 주요 클래스:
- ArrayList: 동적으로 크기가 변하는 배열.
- LinkedList: 노드 기반의 데이터 구조.
- HashSet: 해시 기반의 Set 구현체.
- HashMap: 해시 기반의 Map 구현체.
- TreeMap: 키를 기준으로 정렬된 Map.
- 알고리즘(Algorithm)
- 컬렉션 데이터를 조작하는 데 사용되는 메서드의 모음.
- 주요 알고리즘:
- 정렬(Sorting)
- 검색(Search)
- 셔플(Shuffle)
- 비교(Comparison)
주요 인터페이스 및 구현 클래스
0. Collection (인터페이스로써, java.util.Collection)
- 특징: Java에서 제공하는 데이터 저장 객체의 상위 인터페이스. 데이터를 그룹으로 관리하기 위한 상위 인터페이스.
- 모든 컬렉션 프레임워크(List, Set, Queue)는 이 Collection 인터페이스를 확장하여 구현됨
- 주요 메서드 :
- boolean add(E e) : 요소를 추가.
- boolean remove(Object o) : 특정 요소를 제거.
- boolean contains(Object o) : 특정 요소가 있는지 확인.
- Iterator<E> iterator() : 컬렉션에 저장된 요소를 순차적으로 접근할 수 있는 Iterator를 반환.
1. List
- 특징: 순서가 있으며, 중복 요소를 허용.
- 구현 클래스:
- ArrayList: 배열 기반, 빠른 검색.
- LinkedList: 노드 기반, 빠른 삽입/삭제.
- Vector: 동기화 지원, ArrayList와 유사.
2. Set
- 특징: 순서가 없으며, 중복 요소를 허용하지 않음.
- 구현 클래스:
- HashSet: 해시 기반, 순서 보장 안 함.
- LinkedHashSet: 삽입 순서 유지.
- TreeSet: 정렬된 순서 유지.
3. Map
- 특징: 키-값 쌍으로 데이터 저장, 키는 중복 허용하지 않음.
- 구현 클래스:
- HashMap: 해시 기반, 순서 보장 안 함.
- LinkedHashMap: 삽입 순서 유지.
- TreeMap: 키의 정렬된 순서 유지.
컬렉션 프레임워크의 장점
- 코드 간소화
- 재사용 가능한 자료구조 및 알고리즘 제공.
- 일관성
- 인터페이스를 통해 일관된 프로그래밍 가능.
- 유연성
- 다양한 데이터 구조를 쉽게 교체 가능.
- 성능 최적화
- 고성능 알고리즘과 자료구조 제공.
Collection과 배열의 차이점
특징 | Collection | 배열 |
크기 | 동적으로 크기 변경 가능 | 고정 크기 |
데이터 타입 | 서로 다른 타입의 객체 저장 가능 | 같은 타입의 데이터만 저장 |
편리성 | 메서드 제공(삽입, 삭제, 검색 등) | 직접 구현 필요 |
성능 | 크기 조절 및 복잡한 연산에 약간의 오버헤드 | 상대적으로 빠름 |
컬렉션 프레임워크의 예시
1. ArrayList 사용
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
for (String item : list) {
System.out.println(item);
}
}
}
2. HashMap 사용
import java.util.HashMap;
public class Example {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");
System.out.println(map.get(1)); // Output: One
}
}
웹 프로그래밍에서의 컬렉션 사용
- 데이터 저장 및 처리
- 사용자 입력 데이터를 리스트나 맵에 저장.
- 검색 및 정렬
- 정렬된 데이터를 제공하거나, 키를 기반으로 검색.
- JSON 데이터 매핑
- JSON 객체를 맵이나 리스트로 변환하여 처리.
List를 사용한 예제
Iterator (인터페이스)
java.util 패키지에 포함된 별도의 인터페이스로, 특정 컬렉션(Collection) 내의 요소를 순차적으로 접근하는 데 사용.
java.util
├── Collection
│ ├── List
│ │ ├── ArrayList
│ │ ├── LinkedList
│ │ └── Vector
│ ├── Set
│ │ ├── HashSet
│ │ ├── LinkedHashSet
│ │ └── TreeSet
├── Map
│ ├── HashMap
│ ├── LinkedHashMap
│ └── TreeMap
└── Iterator (독립적인 인터페이스)
Iterator의 역할
- 컬렉션 내부 구조를 숨기면서 요소를 순회.
- for-each 루프가 없는 Java 1.4 이전에는 기본적인 컬렉션 순회 방법.
- 컬렉션의 요소를 추가, 제거, 읽는 작업을 지원.
Iterator vs. For-each
- For-each 루프는 내부적으로 Iterator를 사용하지만, 코드가 간결.
- Iterator는 요소를 제거하거나 복잡한 제어를 할 때 유리.
정리
- Iterator는 독립적인 인터페이스로, 컬렉션을 순회하는 데 사용.
- Collection과 그 하위 구현체(List, Set)는 iterator() 메서드로 Iterator를 제공.
- Map은 직접적으로 제공하지 않지만, entrySet(), keySet(), values()를 통해 Iterator 사용 가능.
예제 코드)
- Collection 인터페이스와 Iterator 인터페이스를 사용하여 컬렉션의 요소를 순회하는 코드
- HashSet을 사용하여 중복을 허용하지 않는 집합(Set) 형태로 데이터를 저장.(HashSet : 저장 순서가 보장되지 않음.)
'멋쟁이사자처럼_부트캠프 > Java' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 18일차 멀티 스레드 (1) | 2024.12.26 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 17일차 Java IO, 버퍼 (1) | 2024.12.24 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 10일차 내부 클래스, 익명 개체, 자주 사용되는 클래스, 제네릭 (2) | 2024.12.13 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 9일차 예외 처리 (0) | 2024.12.13 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 8일차 추상클래스, 인터페이스, Final (0) | 2024.12.11 |