컬렉션 프레임웍(Collections Framework)
1. 컬렉션 프레임웍 (Collections Framework)
컬렉션 프레임웍이란, 데이타들을 저장하는 클래스들을 표준화한 설계이다. 컬렉션 프레임웍에서는 그룹을 크게 3가지
존재하는데, 상속계층도는 아래와 같다.
인터페이스 List와 Set을 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어 공통된 부분을 다시 뽑아 Collection 인터페이스를
정의할 수 있었지만, Map 인터페이스는 이들과는 전혀 다른 형태로 컬렉션을 다루기 때문에 같은 상속계층도에 포함되지 못했다.
인터페이스 | 특징 |
List | 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. |
Set | 순서를 유지하지 않는 집합, 데이터 중복을 불허한다. |
Map | 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않으며 , 키는 중복을 허용하지 않고, 값은 중복을 허용한다. |
참고로 Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임웍이 만들어지기 이전부터 존재하여서
컬렉션프레임웍의 명명법을 따르지 않는다. Vector나 Hashtbale과 같은 컬렉션들보다는 ArrayList와 HashMap을 사용하자.
2. Collection 인터페이스
List와 Set의 조상인 Collection 인터페이스에는 다음과 같은 메서드들이 정의되어있다.
메서드 | 설명 | 메서드 | 설명 |
boolean add(Object o) boolean addAll(Collection c) |
지정된 객체 또는 Collection의 객체들을 Collection에 추가한다. | void clear() | Collection안의 객체 모두 삭제 |
boolean contains(Object o) bollean ContainsAll(Collection c) |
지정된 객체또는 Collection의 객체들이 포함되어있는지 확인 | boolean equals(Object o) | 동일한 Collection인지 비교한다. |
int haschCode() | collection의 hash code 반환 | boolean isEmpty() | Collection이 비어있는지 확인 |
Iterator iterator() | Collection의 Iterator를 얻어서 반환한다. | boolean remove(Object o) boolean removeAll(Collection c) |
지정된 객체 혹은 지정된 Collection안에 모든 객체들을 삭제한다. |
boolean retainAll(Collection c) | 지정된 Collection에 포함된 객체만 남기고 다른 객체들은 전부 삭제한다. 이 작업으로 인해 변화가 있으면 true 없으면 false를 반환한다. | int size() | Collection에 저장된 객체의 수를 반환한다. |
Object[] toArray() | Collection에 저장된 객체를 객체배열로 반환한다. | Object[]toArray(Object[] a) | 지정된 배열에 Collectio의 객체를 저장해서 반환한다. |
3. List인터페이스
List는 중복을 허용하며 저장순서가 유지되는 컬렉션이다. List인터페이스에 정의된 메서드는 다음과 같다. (Collection 상속은 제외)
메서드 | 설명 |
void add(int index, Object element) boolean addAll(int index, Collection C) |
지정된 위치에 객체 또는 컬렉션에 포함된 객체들을 추가한다. |
Object get(int index) | 지정된 위치(index)에 있는 객체를 반환한다. |
int indexOf(Object o) | 지정된 객체의 위치(index)를 반환한다. |
int lastIndexOf(Object o) | 지정된 객체의 위치(index)를 반환한다. 역방향으로 찾는다. |
ListIterator listiterator() ListIterator listiterator(int index) |
List의 객체에 접근할 수 있는 ListIterlator를 반환한다. |
Object remove(int index) | 지정된 위치(index)의 객체를 삭제하고 객체를 반환한다. |
Object set(int index,Object element) | 지정된 위치에 객체를 저장한다. |
void sort(Comparator c) | 지정된 비교자로 List를 정렬한다. |
List subList(int fromIndex, int toIndex) | 지정된 범위에 있는 객체들을 반환한다. |
4. Set인터페이스
Set은 중복을 허용하지 않고 저장 순서가 유지되지 않는다. Set 인터페이스를 구현한 클래스로는 구현한 클래스로는
HashSet, TreeSet이 있다.
5. Map인터페이스
Map은 키(key)와 값(valie)을 하나의 쌍으로 묶어서 저장하는컬렉션 클래스를 구현하는데 사용된다. 키는 중복될 수 없지만
값은 중복을 허용한다. 기존에 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값만
남는다. Map 인터페이스르 구현한 클래스로는 HashTable, HashMap, LinkedHashMap, SortedMap, TreeMap이 있다.
values()에서는 반환타입이 Collection이고, keySet()에서는 반환타입이 Set인 것에 주목하자.
Map인터페이스에서 값은 중복을 허용하기 때문에 Collection타입으로 반환하고, 키는 중복을 허용하지 않기 때문에
Set타입으로 반환한다.
6. Map.Entry 인터페이스
Map.Entry인터페이스는 Map인터페이스의 내부 인터페이스이다. 내부 클래스와 같이 인터페이스도 인터페이스 안에
인터페이스를 정의하는 내부인터페이스를 정의하는 것이 가능하다.
Map에 저장되는 key - value 쌍을 다루기 위해 내부적으로 Entry인터페이스를 정의해 놓았다.
이것은 보다 객체지향적으로 설계하도록 유도하기 위한 것으로 Map인터페이스를 구현하는 클래스에서는 Map,Entry 인터페이스도
함께 구현해야한다. 다음은 Map 인터페이스 코드의 일부이다.
public interface Map {
...
public static interface Entry {
Object getKey();
Object getValue();
Object setValue(Object value);
boolean equals(Object o);
int hashCode();
...
}
}
7. 컬렉션프레임워크 상속계층도