자바 컬렉션
자바 컬렉션(Java Collection)이란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.[1]
목차
개요
자바에서 대용량의 데이터를 추가/삭제하면서 처리가 필요할 때 사용한다.[2] 자바 초기에는 벡터(Vector), 스택(Stack), 해시테이블(HashTable)등의 컬렉션 클래스만 제공했으나, 자바 1.2 이후 표준적인 방식으로 컬렉션을 다루기 위한 컬렉션 프레임워크(Collection FrameWork)가 등장하였다. 모든 컬렉션 클래스명은 구현한 인터페이스 명이 포함되어있어서 바로 클래스의 특징을 알 수 있다. 예를 들어 HashMap 클래스는 Map 인터페이스에 해시(Hash)알고리즘을 이용하여 구현한 것이다. 단, 벡터, 스택, 해시 테이블 처럼 컬렉션 프레임워크 이전 부터 존재한던 컬렉션 클래스(Legacy Class)는 이러한 명명법을 따르지 않는다.[3] 주요 인터페이스에는 리스트(list) 인터페이스, 세트(set) 인터페이스, 맵(Map) 인터페이스 등이 있으며 이 중에서 리스트와 세트 인터페이스는 모두 컬렉션 인터페이스를 상속 받지만, 구조상의 차이로 인해 맵 인터페이스는 별도로 정의된다. 따라서 리스트 인터페이스와 세트인터페이스의 공통된 부분을 컬렉션 인터페이스에서 정의하고 있는 것이다.[1]
특징[3]
장점
- 별도로 컬렉션 클래스를 구현하는 것보다 이미 구현되어 있는것을 사용함으로써 코딩 시간을 감소 시킬 수 있다.
- 컬렉션 프레임워크들은 잘 테스트되고 검증되어 있기 때문에 코드 품질을 보장한다.
- JDK에 포함된 컬렌션 프레임워크들을 사용하여 코드 유지보수 시간을 감소시킬 수 있다.
- 재사용 가능하고 상호 운용성이 보장된다.
구성요소
- 컬렉션 인터페이스 : 모든 컬렉션 인터페이스는 java.util패키지에 있다.
- 컬렉션 클래스 : 모든 컬렉션 클래스는 java.util 또는 java.util.concurrent 패키지에 있다.
- 컬렉션 알고리즘 : 검색, 정렬, 셔플 같은 기능을 제공한다.
컬렉션(Collection) 인터페이스 그룹[3]
컬렉션 인터페이스들은 제네릭으로 표현되어 컴파일 시점에서 객체의 타입을 체크하기 때문에 런타임 에러를 줄이는 데 도움이 된다. 예를 들어 런타임 시 발생하는 ClassCastException을 컴파일 시점에서 찾아낼 수 있다. 또한 클래스 캐스팅을 하지 않아도 되므로 코드를 좀 더 깔끔하게 유지할 수 있다. 컬렉션 인터페이스는 직접적인 수현은 제공하지 않으며 모든 컬렉션 클래스가 구현해야 하는 메소드들을 포함하고 있다. 아래는 Collection 인터페이스에서 제공하는 주요 메소드이다.
컬렉션 인터페이스 메소드[1] 메소드 설명 boolean add(E e) 해당 컬렉션에 전달된 요소를 추가함 void clear() 해당 컬렉션의 모든 요소를 제거함 (선택적 기능) boolean contains(Object o) 해당 컬렉션이 전달된 객체를 포함하고 있는지 확인함 boolean equals(Object o) 해당 컬렉션과 전달된 객체가 같은지 확인함 boolean isEmpty() 해당 컬렉션이 비었는지를 확인함 Iterator<E> iterator() 해당 컬렉션의 반복자(iterator)를 반환함 boolean remove(Object o) 해당 컬렉션에서 전달된 객체를 제거함 (선택적 기능) int size() 해당 컬렉션의 요소의 총 개수를 반환함 Object[] toArray() 해당 컬렉션의 모든 요소를 Object타입의 배열로 반환함
리스트(list) 인터페이스
리스트(list) 인터페이스는 순서가 있는 컬렉션이며 중복 요소를 포함할 수 있다. 인덱스로 모든 요소에 접근할 수 있으며, List 인터페이스로 구현된 클래스는 ArrayList, LinkedList, Vector, Stack이 있다.
리스트 인터페이스 메소드[1] 메소드 설명 boolean add(E e) 해당 리스트에 전달된 요소를 추가함 (선택적 기능) void add(int index, E e) 해당 리스트의 특정 위치에 전달된 요소를 추가함 (선택적 기능) void clear() 해당 리스트의 모든 요소를 제거함 (선택적 기능) boolean contains(Object o) 해당 리스트가 전달된 객체를 포함하고 있는지 확인함 boolean equals(Object o) 해당 리스트와 전달된 객체가 같은지 확인함 E get(int index) 해당 리스트의 특정 위치에 존재하는 요소를 반환함 boolean isEmpty() 해당 리스트가 비었는지를 확인함 Iterator<E> iterator() 해당 리스트의 반복자(iterator)를 반환함 boolean remove(Object o) 해당 리스트에서 전달된 객체를 제거함 (선택적 기능) boolean remove(int index) 해당 리스트에서 특정 위치에 존재하는 요소를 제거함. (선택적 기능) E set(int index, E e) 해당 리스트의 특정 위치에 존재하는 요소를 전달받은 객체로 대체함 (선택적 기능) int size() 해당 리스트의 요소의 총 개수를 반환함 Object[] toArray() 해당 리스트의 모든 요소를 Object타입의 배열로 반환함
세트(set) 인터페이스
세트(Set) 인터페이스는 중복 요소를 포함할 수 없으며 랜덤 액세스를 허용하지 않으므로, iterator 또는 foreach를 이용하여 요소를 탐색할 수 있다. Set 인터페이스로 구현된 클래스는 HashSet, TreeSet, LinkedHashSet 이 있다.
세트 인터페이스 메소드[1] 메소드 설명 boolean add(E e) 해당 집합(set)에 전달된 요소를 추가함.(선택적 기능) void clear() 해당 집합의 모든 요소를 제거함 boolean contains(Object o) 해당 집합이 전달된 객체를 포함하고 있는지를 확인함 boolean equals(Object o) 해당 집합과 전달된 객체가 같은지를 확인함 boolean isEmpty() 해당 집합이 비어있는지를 확인함 Iterator<E> iterator() 해당 집합의 반복자(iterator)를 반환함 boolean remove(Object o) 해당 집합에서 전달된 객체를 제거함(선택적 기능) int size() 해당 집합의 요소의 총 새수를 반환함 Object[] toArray() 해당 집합의 모든 요소를 Object타입의 배열로 반환함
큐(queue) 인터페이스
Queue 인터페이스는 처리하기전에 요소를 보유하는 데 사용된다. 기본 컬렉션 작업 외에도 Queue는 삽입, 추출 및 검가 작업을 제공한다. 일반적으로 Queue는 요소를 FIFO방식으로 정렬하며 예외에는 우선순위가 높은 것 부터 출력하는 우선순위 큐가 있다. Queue 인터페이스로 구현된 클래스는 Priority Queue, Linkedlist, Dequeue등이 있다. Deque인터페이스는 양쪽 끝에 요소 삽입 및 제거를 지원하며 Double ended Queue의 약자이며 데크라고 읽는다. Deque 인터페이스로 구현된 클래스는 ArrayDeque가 있으며 Java SE 6 부터 지원되는 ArrayDeque 클래스는 스택과 큐 메모리 구조를 모두 구현하는데 가장 적합한 클래스이다.
|+ 세트 인터페이스 메소드[1] !align=center style="background-color:#ffeecc"|메소드 !align=center style="background-color:#ffeecc"|설명
|- |align=center| |align=center| |- |align=center| |align=center| |- |align=center| |align=center| |- |align=center| |align=center| |- |align=center| |align=center| |- |align=center| |align=center| |- |align=center| |align=center| |- |align=center| |align=center| |- |align=center| |align=center| |}
각주
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 TCP SCHOOL, <컬렉션 프레임워크의 개념>, <<TCP SCHOOL>>
- ↑ JEONG_AMATEUR, <JAVA 컬렉션 (Vector, ArrayList, LinkedList, Set, Map)>, <<개인 블로그>>, 2017-11-02
- ↑ 3.0 3.1 3.2 개발새발!, <자바 컬렉션 프레임워크(Java Collection Framework) 정리>, <<개인 블로그>>, 2018-06-28
참고자료
- TCP SCHOOL, <컬렉션 프레임워크의 개념>, <<TCP SCHOOL>>
- JEONG_AMATEUR, <JAVA 컬렉션 (Vector, ArrayList, LinkedList, Set, Map)>, <<개인 블로그>>, 2017-11-02
- 개발새발!, <자바 컬렉션 프레임워크(Java Collection Framework) 정리>, <<개인 블로그>>, 2018-06-28
같이 보기