본문 바로가기

자바(JAVA)/기본 문법

자바컬렉션 프레임워크(Java Collection Framework) 장점 / 종류

자바 컬렉션 프레임워크란?

애플리케이션을 개발하다 보면 다수의 객체를 저장해두고 필요할 때마다 꺼내서 사용해야되는 경우가 발생하는데 이런 경우 가장 간단한 방법은 자바의 배열을 이용하는 것이다.

 

배열은 쉽게 생성하고 사용할 수 있는 반면 저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하는데 문제가 생길 수 있다. 또한 데이터를 삭제하게 되면 해당 인덱스의 데이터는 비어있게 되어 메모리가 낭비되는 등 여러 문제가 발생할 수 있다.

 

자바는 JDK 1.2 버전부터 이러한 문제를 해결하기 위해 자료구조(Data Structure)를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함시켜놓았다.

이들을 총칭하여 컬렉션 프레임워크(Collection Framewrk)라 한다.

 

컬렉션 프레임워크는 다수의 요소를 하나의 그룹으로 묶어 효율적으로 저장하고 관리할 수 있는 기능을 제공하는 일종의 컨테이너다.

 

자바 컬렉션 프레임워크는 몇 가지 인터페이스를 통해서 다양한 컬렉션 클래스를 이용할 수 있도록 하였으며, 대표적인 인터페이스로는 아래와 같다.

 

 

Java 컬렉션 클래스의 두가지 주요 루트 인터페이스는 Collection 인터페이스(java.util.Collection)과 Map 인터페이스(java.util.Map) 이다.

 

유지보수를 쉽게 만들어 주는 컬렉션 프레임워크 장점

  • List, Queue, Set, Map등의 인터페이스를 제공하고 이를 구현하는 클래스를 제공하여 일관된 API를 사용할 수 있다.
  • 가변적인 저장 공간을 제공한다.
  • 자료구조, 알고리즘을 구현하기 위한 코드를 직접 작성할 필요 없이, 이미 구현된 컬렉션 클래스를 목적에 맞게 선택하여 사용하면 된다.
  • 제공되는 API 코드는 검증되어있으며, 고도로 최적화 되어있다.

 

컬렉션 프레임워크 구성 요소

  • 인터페이스(Interface) : 각 컬렉션을 나타내는 추상 데이터에 대한 인터페이스(List, Set, Map 등)로 클래스는 이 인터페이스를 상속받아 구현되었으므로 상세한 동작은 달라도 일관된 조작법으로 사용이 가능
  • 클래스(class) : 컬렉션 별 인터페이스의 상세 구현(Implementation)한 것으로 예를들어 List 인터페이스로 사용 가능한 클래스는 ArrayList, Vector, linkedList가 있다.
  • 알고리즘 : 컬렉션이 제공하는 연산, 검색, 정렬, 셔플등에 대한 메소드

 

 

자료구조(Data Structure)의 분류

자료구조의 여러 분류법 가운데, 대표적으로 많이 분류되는 방법은 선형 자료구조(Linear Data Structure)과 비선형 자료구조(NonLinear Data Structure)로 나눌 수 있다.

이러한 분류를 보통 "형태에 따른 자료구조" 라고 보게 되며, 각 자료구조에 알맞게 구체화된 것을 "구현된 자료구조"라고 한다.

 

선형 자료구조란 ?

데이터가 일렬로 연결된 형태를 말하며, 우리가 흔히 사용하는 int[] 배열같은 것을 예시로 들 수 있다.

선형 자료구조는 대표적으로 리스트(List), 큐(Queue), 덱(Deque)이 있다.

 

비선형 자료구조란?

선형구조의 반대로 각 요소가 여러개의 요소와 연결된 형태(마치 거미줄처럼)를 생각하면 된다.

비선형 자료구조는 대표적으로 그래프(Graph), 트리(Tree)가 있다.

 

이 두가지에 포함되지 않는 자료구조 중에 집합(Set)도 있다. 이런 경우 보통 기타 자료구조 또는 집합 자료구조라고 말하며, 집합의 경우에는 데이터가 연결된 형식이 아닌 table에 가까운 자료구조로 볼 수 있다.

 

 

Java Collection Framework 종류

 

[1] Collection 인터페이스

  (1) List

     - 순서를 유지하고 저장

     - 중복 저장이 가능

     - 구현 클래스 : ArrayList, Vector, LinkedList

  (2) Set

     - 순서를 유지하지 않고 저장

     - 중복 저장 안됨

     - 구현 클래스 : HashSet, LinkedHashSet, TreeSet

   (3) Queue

     - 데이터가 저장된 순서대로 출력되는 선입선출(FIFO : First In First Out)의 구조를 갖는 선형 자료구조

     - 인터페이스는 존재하지만 직접 구현된 클래스는 존재하지 않음

        → 따라서 Queue를 구현하려면 LinkedList를 사용하여 구현할 필요가 있다.

 

  [2] Map 인터페이스

     - Key-Value 쌍으로 데이터 저장

     - 키는 중복 저장 안됨

     - 구현 클래스 : HashMap, HashTable, TreeMap