[Java] 자바 - Collection이란? (컬렉션과 제네릭)
자바 - Collection이란? (컬렉션과 제네릭)
컬렉션(collection)은 많은 데이터 요소를 효율적으로 관리하기 위한 자료구조를 말하며, ArrayList, LinkedList, HashMap 등이 여기에 포함됩니다. 그리고 이 컬렉션들은 제네릭(generics) 형식으로 구현되어 있어 컬렉션과 함께 제네릭에 대해서도 알아둘 필요가 있습니다.
목차
- 컬렉션(collection)이란?
- 컬렉션의 종류
- 컬렉션의 특징
- Collection 인터페이스의 주요 메서드
- 제네릭(generics)이란?
1. 컬렉션(collection)이란?
컬렉션(collection)이란 많은 수의 데이터를 그 사용 목적에 적합한 자료구조로 묶어 하나로 그룹화한 객체를 말합니다. 자바에서는 이러한 컬렉션을 위한 인터페이스와 클래스들이 있으며 자주 사용되는 클래스들의 종류와 상속 계층도는 아래와 같습니다.
2. 컬렉션의 종류
컬렉션의 종류는 ArrayList, LinkedList, Vector, Stack, HashSet, TreeSet, HashMap, TreeMap 등이 있으며, 크게 아래와 같은 자료구조 유형에 따라 구분됩니다.
- List : 이름과 같이 목록처럼 데이터를 순서에 따라 관리합니다.
- Set : 중복이 허용되지 않는 데이터를 관리합니다.
- Map : 데이터를 Key와 Value로 짝을 이루어 관리하며, Key값은 중복을 허용하지 않습니다.
- Queue : 데이터 In / Out 순서를 FIFO 방식으로 관리합니다. (FIFO : First In First Out)
- Stack : 데이터 In / Out 순서를 LIFO 방식으로 관리합니다. (LIFO : Last In First Out)
3. 컬렉션의 특징
컬렉션 클래스들이 데이터를 다룰 때 그 데이터는 기본적으로 객체만 가능합니다. 따라서 char, int, float와 같은 기본형은 사용할 수 없고 대신 Wrapper클래스를 사용해야 합니다. 하지만, 오토박싱(auto boxing)과 오토언박싱(auto unboxing)으로 인해 사용자는 마치 기본형을 다룰 수 있는 것처럼 사용할 수 있습니다.
컬렉션과 관련된 인터페이스 또는 클래스가 정의되어 있는 코드를 살펴보면 아래와 같이 제네릭(generics) 형태로 구현되어 있는 것을 확인할 수 있습니다. 따라서 사용자는 사용하고자 하는 데이터 타입을 지정하여 사용할 수 있습니다.
public interface List<E> extends Collection<E> { ... }
List, Set, Queue는 공통분모로 Collection 인터페이스를 상속받고 있으며, Collection 인터페이스가 가지는 주요 메서드는 아래와 같습니다.
1) Collection 인터페이스의 주요 메서드
- boolean add(E e) : 현재 컬렉션에 데이터 객체 e를 추가합니다.
- boolean addAll(Collection<? extends E> c) : 현재 컬렉션에 컬렉션 c의 모든 데이터를 추가합니다.
- boolean contains(Object o) : 현재 컬렉션에 객체 o의 포함 여부를 반환합니다.
- boolean containsAll(Collection<?> c) : 현재 컬렉션에 컬렉션 c의 모든 데이터가 포함되어있는지 여부를 반환합니다.
- boolean remove(Object o) : 현재 컬렉션에서 객체 o를 삭제합니다.
- boolean removeAll(Collection<?> c) : 현재 컬렉션에서 컬렉션 c와 일치하는 데이터를 삭제합니다.
- boolean retainAll(Collection<?> c) : 현재 컬렉션에서 컬렉션 c와 일치하는 데이터만 남기고 나머지는 삭제합니다.
- void clear( ) : 현재 컬렉션의 모든 데이터를 삭제합니다.
- int size( ) : 현재 컬렉션에 포함된 데이터 개수를 반환합니다.
- boolean isEmpty( ) : 현재 컬렉션이 비어있는지 여부를 반환합니다.
- Iterator<E> iterator( ) : 현재 컬렉션의 모든 요소에 대한 iterator를 반환합니다.
- Object[ ] toArray( ) : 현재 컬렉션에 저장된 데이터를 Object 배열로 반환합니다.
- <T> T[ ] toArray(T[ ] a ) : 현재 컬렉션에 저장된 데이터를 배열 a에 담고 배열 a를 반환합니다.
4. 제네릭(Generics)이란?
제네릭(generics)은 한 번의 정의로 여러 종류의 데이터의 타입을 다룰 수 있도록 하는 방법을 말합니다. 예를들어 아래와 같이 ArrayList<E> 형태로 클래스가 정의되어 있다면, 사용자는 데이터로 String을 사용할 때는 ArrayList<String>으로, Integer를 사용할 때는 ArrayList<Integer>로 지정하여 사용할 수 있습니다.
이처럼 사용자가 사용시에 데이터 타입을 지정하게 되면 컴파일 단계에서 데이터 타입을 미리 체크할 수 있는 장점이 있습니다.
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
...
}
(사용예시1) ArrayList<String> a1 = new ArrayList<String>( );
(사용예시2) ArrayList<Integer> a2 = new ArrayList<Integer>( );