컬렉션 프레임워크(Collection Framework) 개요
- 데이터 군(群)을 저장하는 클래스들을 표준화한 설계
cf1) 컬렉션 = 데이터 그룹
cf2) 프레임워크 = 표준화된 프로그래밍 방식
컬렉션 프레임워크의 장점
- 객체지향적 설계를 바탕으로 다수의 데이터를 저장하기 위한 클래스를 하나의 체계로 일원화하여 재사용성이 높음
- 다수의 데이터를 다루는 데 필요한 다양한 클래스를 제공하여 기능 구현의 부담을 경감
cf) 점선 테두리는 인터페이스, 실선 테두리는 클래스
- 컬렉션 프레임워크에서는 컬렉션 데이터 그룹을 크게 List, Set, Map의 3가지로 구분
- List와 Set의 공통 부분은 Collection 인터페이스로 분리
- Map은 키-값 쌍 형태로 컬렉션을 다룬다는 점으로 인해 Collection 인터페이스의 자손 인터페이스가 아닌 별개의 인터페이스로 취급
Collection 인터페이스 개요
- List와 Set의 공통 조상이 되는 인터페이스
: 컬렉션을 다루는 데 필요한 가장 기본적인 메서드들을 정의- 이 외에도 람다, 스트림 관련 메서드들을 포함
Collection 인터페이스의 메서드
cf) List와 Set 인터페이스에 공통으로 정의된 메서드들만 정리
(Collection 인터페이스에 정의된 모든 메서드는 여기에서 확인 가능)
boolean add(Object o)
/boolean addAll(Collection c)
: 지정된 객체나 다른 컬렉션의 객체들을 현재 Collection에 추가
void clear()
: Collection의 모든 객체를 삭제
boolean contains(Object o)
/boolean containsAll(Collection c)
: 지정된 객체나 Collection의 객체들이 현재 Collection에 포함되었는지를 확인
boolean equals(Object o)
: 동일한 Collection인지를 서로 비교
int hashCode()
: Collection의 해시코드를 반환
boolean isEmpty()
: Collection이 비어 있는지를 확인
Iterator iterator()
: Collection의 Iterator를 얻어서 반환
boolean remove(Object o)
/boolean removeAll(Collection c)
: 지정된 객체 또는 지정된 Collection에 포함된 객체들을 현재 Collection에서 삭제
(차집합과 동일)
boolean retainAll(Collection c)
: 현재 Collection에서 지정된 Collection에 포함된 객체만을 남기고, 이 작업으로 인해 현재 Collection에 변화가 있으면 true, 변화가 없으면 false를 반환
(교집합과 동일)
int size()
: 현재 Collection에 저장된 객체의 개수를 반환
Object[] toArray()
: 현재 Collection에 저장된 객체를 객체배열로 반환
Object[] toArray(Object[] a)
: 지정된 배열에 현재 Collection에 포함된 객체를 저장해서 반환
List 인터페이스 개요
- 중복을 허용하면서 저장 순서가 유지되는 컬렉션을 구현하기 위해 사용되는 인터페이스
- 구현 클래스 : ArrayList, LinkedList, Stack, Vector
List 인터페이스에서 추가 정의된 메서드
cf) List 인터페이스에 정의된 모든 메서드는 여기에서 확인 가능
void add(int index, Object o)
/boolean addAll(int index, Collection c)
: 지정된 위치에 단일 객체나 컬렉션에 포함된 객체들을 추가
Object get(int index)
: 지정된 위치의 객체를 반환
int indexOf(Object o)
: List의 첫번째 요소부터 순방향으로 탐색하여 지정된 객체의 위치를 반환
int lastIndexOf(Object o)
: List의 마지막 요소부터 역방향으로 탐색하여 지정된 객체의 위치를 반환
ListIterator listIterator()
/ListIterator listIterator(int index)
: List의 객체에 접근할 수 있는 ListIterator를 반환
Object remove(int index)
: 지정된 위치에 있는 객체를 삭제하고, 삭제된 객체를 반환
Object set(int index, Object element)
: 지정된 위치에 저장된 객체를 지정된 객체(element)로 변경
void sort(Comparator c)
: 지정된 비교자로 List를 정렬
List subList(int fromIndex, int toIndex)
: 지정된 범위에 있는 객체를 반환
Set 인터페이스 개요
- 중복을 허용하지 않고 저장순서도 유지되지 않는 컬렉션 클래스를 구현하기 위해 사용되는 인터페이스
- 구현 클래스 : HashSet, TreeSet 등
cf) Set 인터페이스에서는 Collection 인터페이스에 공통으로 정의된 메서드 중 일부를 활용
(Set 인터페이스에 정의된 모든 메서드는 여기에서 확인 가능)
Map 인터페이스 개요
- 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하기 위해 사용되는 인터페이스
- 키는 중복될 수 없으나 값은 중복을 허용
: 기존에 저장된 키와 중복된 키를 보유하는 키-값 쌍을 저장할 시
기존 값에 새로운 값 덮어쓰기 수행- 저장순서는 유지되지 않음
- 구현 클래스 : HashTable, HashMap, LinkedHashMap, TreeMap, Properties 등
cf) Map 인터페이스에 정의된 모든 메서드는 여기에서 확인 가능
void clear()
: Map에 저장된 모든 key-value 쌍을 삭제
boolean containsKey(Object key)
: 지정된 key 객체와 일치하는 Map의 key 객체가 있는지 확인
boolean containsValue(Object value)
: 지정된 value 객체와 일치하는 Map의 value 객체가 있는지 확인
Set entrySet()
: Map에 저장된 key-value 쌍을 Map.Entry 타입 객체에 대한 Set으로 반환
boolean equals(Object o)
: 동일한 Map인지 비교
Object get(Object key)
: 지정한 key 객체에 대응하는 value 객체를 찾아서 반환
int hashCode()
: Map의 해시코드를 반환
boolean isEmpty()
: Map이 비어 있는지를 확인
Set keySet()
: Map에 저장된 모든 key 객체를 반환
Object put(Object key, Object value)
: 지정한 key 객체에 value 객체를 연결하여 Map에 저장
void putAll(Map t)
: 지정한 Map의 모든 key-value 쌍을 추가
Object remove(Object key)
: 지정한 key 객체와 일치하는 key-value 쌍을 Map에서 삭제
int size()
: Map에 저장된 key-value 쌍의 개수를 반환
Collection values()
: Map에 저장된 모든 value 객체를 반환
Map.Entry 인터페이스 개요
- Map에 저장되는 key-value 쌍을 다루기 위해 정의된 내부 인터페이스
- Map을 구현하는 클래스는 Map.Entry 인터페이스도 필수적으로 구현
Map.Entry 인터페이스의 주요 메서드
boolean equals(Object o)
: 동일한 Entry인지를 비교
Object getKey()
: Entry의 key가 되는 객체를 반환
Object getValue()
: Entry의 value가 되는 객체를 반환
int hashCode()
: Entry의 해시코드를 반환
Object setValue(Object value)
: Entry의 value가 되는 객체를 지정한 객체로 변경
컬렉션 클래스 간 관계
컬렉션 클래스별 특징