java

[210112] java collection

hjk927 2021. 1. 12. 10:11

Collection Framework


컬렉션 프레임워크(Collection Framework)

컬렉션 프레임워크는 오브젝트의 집합을 구현하며, 다른 클래스를 저장하는 목적으로 사용된다. interface를 통해서 제공된다. 

 

 

컬렉션 프레임워크를 사용했을 때의 장점

먼저, 자바에서 제공하는 자료구조와 알고리즘을 그대로 사용할 수 있으므로 직접 프로그래밍을 할 필요가 줄어든다. 컬렉션 프레임워크에서 제공하는 자료구조나 알고리즘은 높은 수준으로 구현되어 있다. 그리고, 다형성을 통해 인터페이스를 바꿔서 상속하면서 각각의 인터페이스에 대한 다양한 구현을 할 수 있다. 기본 인터페이스를 베이스로 한 재사용도 가능하다. 

 

 

컬렉션 프레임워크는 다음을 포함한다. 

  • Collection interface: set, list, map같은 다른 차입의 collection을 묘사한다. 
  • General-purpose implementations(일반적 목적의 구현) : collection 인터페이스에 대한 주 구현 제공
  • Legacy implementations : vector나 hashtable 같은 출시가 빨랐던 collection class에 대해서 collection 인터페이스를 새로 장착하였다. 
  • Special-purpose implementations(특수한 목적 구현) : 구현은 특수한 상횡의 사용에 대해 설계되어 있다. 구현들은 기본적이지 않은 수행 특징, 사용 제한, 혹은 행동을 제공한다. 
  • Concurrent implementations(공존하는 구현) : 구현은 공통적인 사용을 위해 설계된다. 
  • Wrapper implementations(래퍼 구현) : 동기화나 다른 구현 같은 기능을 추가한다. 
  • Abstract implementations(추상 구현) : custom 구현을 가능하게 하기 위해서 collection interface를 불완전하게 구현한다.
  • Algorithms : list 정렬과 같은, collection에 관한 유용한 기능을 수행하는 정적 메소드
  • Infrastructure (기초 시설) : collection 인터페이스에 대해 필수적인 지원을 제공하는 인터페이스
  • Array Utilities (배열 유틸리티) : 원시적인 타입과 참조 객체의 배열에 대한 유틸리티 함수. 엄밀히 말하자면, collection framework의 일부분이 아니라, collection framework와 의존하는 몇몇 같은 기초시설과 동시에 자바 플랫폼에서 추가된 기능이다. 

 

Collection Interfaces


https://www.codejava.net/java-core/collections/overview-of-java-collections-framework-api-uml-diagram

 

collection interface는 2개의 그룹으로 나눠진다. 가장 대중적인 인터페이스는 java.util.Collection으로, 인터페이스를 상속받는 자식은 아래와 같다.

  • java.util.Set
  • java.util.SortedSet
  • java.util.NavigableSet
  • java.util.Queue
  • java.util.concurrent.BlockingQueue
  • java.util.concurrent.TransferQueue
  • java.util.Deque
  • java.util.concurrent.BlockingDeque

 

 

다른 collection interface는 java.util.Map을 기초로 한다. Map은 엄밀히 말하면 collection이 아니다. 하지만, 이 인터페이스도 collection을 조절할 수 있게 해주는 collection-view operations를 포함하고 있다. Map의 자식은 아래와 같다. 

  • java.util.SortedMap
  • java.util.NavigableMap
  • java.util.concurrent.ConcurrentMap
  • java.util.concurrent.ConcurrentNavigateMap

 

 

Collection Framework에 관련된 용어 

설명 O X
Collection 수정 메소드(add, remove, clear 등)를 호출할 수 있는가? modifiable unmodifiable
생성 후에 Collection object의 상태 변경이 가능한가? mutable immutable
리스트의 요소가 변경될 때 크기도 변경되는가? variable-size list fixed-size list
리스트가 인덱싱을 지원하는가? random access list sequential access list

 

 

 

Collection 구현 


interface Hash Table Resizale Array Balanced Tree Linked List HashTable + LinkedList
Set HashSet   TreeSet   LinkedHashSet
List   ArrayList   LinkedList  
Deque   ArrayDeque   LinkedList  
Map HashMap   TreeMap   LinkedHashMap

 

collection은 크게 list, set, map으로 나눌 수 있다. 

 

List : 순서가 있는 컬렉션이며 중복 값을 저장할 수 있다.

  • ArrayList : 주로 쓰이는 리스트로 기본적인 성능을 보장한다. 
  • LinkedList : linked list를 사용해서 요소를 저장한다. ArrayList와 비교했을 때 저장, 삭제가 빠르지만 검색이 느리다. 
  • Vector : 컬렉션 프레임워크가 나오기 전에 사용하던 List interface이다. 

Set : 중복 값을 저장하지 않는 컬렉션이다. 

  • HashSet : hash table에 요소를 저장한다. 
  • TreeSet : 레드-블랙 트리 구조로 요소를 저장한다. 값을 기준으로 정렬이 되어서 저장되므로 HashSet보다 느리다. 
  • LinkedHashSet : linked list와 함께 hash table을 구현한 것으로 삽입 순서에 따라 요소를 저장한다. 

Map : key-value 구조로 오브젝트를 저장하는 컬렉션이다. 중복 key를 저장하지 않는다. HashMap, TreeMap, LinkedHashMap이 있으며 상세 사항은 Set과 유사하다. 

 

 

 

 

 

 

- 참고자료 

docs.oracle.com/javase/8/docs/technotes/guides/collections/index.html

soft.plusblog.co.kr/71

docs.oracle.com/javase/tutorial/collections/interfaces/index.html

en.wikiversity.org/wiki/Java_Collections_Overview

www.tcpschool.com/java/java_collectionFramework_list

www.codejava.net/java-core/collections/overview-of-java-collections-framework-api-uml-diagram