더 정확히 표기하자면 Java Collection Framework(JCF) 라고 표기할 수 있겠네요. Back-end 개발을 하다보면 데이터를 저장해 두었다가 꺼내 쓰는 등, 특정 데이터들을 용도에 맞게 효과적으로 처리할 수 있도록 도와주는 표준화된 방법들이 담긴 클래스 정도로 이해하시면 될 것 같습니다. 다시 말해, 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화해서 클래스로 만들어 놓은 것을 말합니다.
아래 사진은 Java Collection Framework의 상속 구조를 나타낸 이미지입니다.
출처 : https://beginnersbook.com/java-collections-tutorials/
Collection 인터페이스는 크게 List와 Queue, Set 3가지 상위 인터페이스로 분류가 됩니다. Map 의 경우에는 Value 만 가지고 있는 Collection 인터페이스와 달리 Key 까지 가지고 있으니 디자인 단계에서 따로 분류가 되었다고 Stack Overflow 에서 본 적이 있습니다.
다시 말해, Map 인터페이스는 Collection 인터페이스를 상속 받고 있지 않지만, Java Collection Framework 에는 포함되는 개념입니다. 우리가 흔히 부르는 Collection 에는 List, Queue, Set 와 Map 이 포함되었다고 생각하시면 쉽습니다.
인터페이스 | 구현클래스 | 특징 |
---|---|---|
Set | HashSet / LinkedHashSet / SortedSet / TreeSet | 순서를 유지하지 않는 데이터들의 집합이며, 중복을 허용하지 않음 |
Queue | Deque / PriorityQueue | 먼저 넣은 데이터를 먼저 꺼내는 데이터 집합 |
List | ArrayList / LinkedList / Vector | 데이터들의 순서가 존재하며, 중복 또한 허용한다 |
Map | HashTable / HashMap / TreeMap | 키(Key) 와 값(Value) 가 서로 한쌍을 이루는 데이터 집합으로, 순서는 유지하지 않으며, 키(Key) 의 중복은 허용하지 않지만, 값(Value) 의 중복은 허용하는 데이터 집합 |
순서를 유지할 필요가 없고, 값들의 중복을 허용하고 싶지 않을 때 사용되는 자료구조 입니다.
순서를 예측할 수 없습니다.
가장 빠른 임의 접근 속도를 가지고 있습니다.
Thread Safe 하지 않습니다.
💡 Thread Safe 란? 스레드 안전(thread 安全, 영어: thread safety)은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.데이터들이 저장된 순서를 따르며, 데이터들의 중복을 허용하는 자료구조 입니다.
Key(키)와 Value(값) 의 쌍으로 이루어진 자료구조입니다. 순서는 유지하지 않으며, Key(키) 의 중복은 허용하지 않지만, Value(값) 의 중복은 허용합니다.
추상적으로 Java Collection 에는 Set, List, Map 등이 있지만, 각 인터페이스들이 어떠한 경우에 사용 되고, 어떤 경우에 유리한 지에 대해 정확하게 정리되어 있지 않았습니다. 보통 자료구조라 하면 ArrayList 에 데이터들을 넣고 반복문을 통해 가져다 쓰는 정도로만 생각을 했었는데, Java Collection 에 대해 정리하다보니 앞으로 개발을 하며 더 많은 활용을 할 수 있겠다 라는 생각을 했습니다.
추가적으로 배열과 컬렉션 인터페이스가 어떤 차이점을 가지고 있는지에 대해서 공부해보는 것도 좋을 것 같습니다.