본문 바로가기

Programming/JAVA

컬렉션 프레임워크(1) - 컬렉션 프레임워크 개념

java logo image

 

 

 

우선 컬렉션 프레임워크(Collection Framework)란 무엇을 의미하고, 왜 사용하는지에 대해서 먼저 짚고 넘어가도록 하겠습니다.

 

개발 과정에서 여러 개의 객체를 사용해야 하는 경우가 발생합니다. Product 인스턴스를 10개를 다루어야 하는 상황이라고 가정해 볼까요? 어찌어찌 10개의 인스턴스를 생성하고 저장해 둔 다음, 조회하거나 꺼내서 사용하려면 어떤 방법을 사용해야 할까요? 

 

우선 기본적으로는 배열을 사용할 수 있겠습니다.

 

// 1. 길이가 10인 배열 생성
Product[] array = new Product[10];

// 2. 객체 추가
array[0] = new Product("Model1");
array[1] = new Product("Model2");

// 3. 객체 검색 및 적용
Product model1 = array[0];
Product model2 = array[1];

// 4. 객체 삭제
array[0] = null;
array[1] = null;

 

new를 통해 생성한 Product 타입의 객체를 배열에 저장하고, 이를 사용한 다음 null을 이용해서 삭제하는 과정까지를 수행했습니다. 하지만, 실제로는 이러한 방식으로 다수의 객체를 다룰 수는 없습니다. 

 

기본적으로 배열은 객체 저장 메모리가 배열 생성 시점에 결정이 되어 고정됩니다. 그래서 가변적인 데이터를 다루는 데는 부적합하죠(무작정 큰 메모리를 차지하는 배열을 선언한다고 해결되지 않습니다). 또한, 배열에서 특정 인덱스의 객체를 삭제한다고 가정해 보면, 삭제된 인덱스는 텅 빈 상태가 되어버립니다. 듬성듬성 이가 빠진 것처럼 데이터가 남게 되죠. 만약 여기에 새로운 데이터를 추가한다고 하면 [비어있는 인덱스를 찾는 과정]까지 추가로 필요하게 됩니다. 

 

그래서 JAVA에서 이러한 문제점을 해결하기 위해서 만들어 둔 것이 컬렉션 프레임워크(Collection Framework)입니다. 이 컬렉션 프레임워크의 단어 관점에서의 개념을 살펴보면, '컬렉션'은 객체를 수집해서 저장하는 역할을 하는 것입니다. 프레임워크는 사용방법이 정의된 라이브러리를 뜻합니다.

 

 

 


 

 

 

 

자바에서 제공하는 컬렉션 프레임워크는 몇 가지 주요 인터페이스를 통해, 여러 가지 컬렉션 클래스를 사용할 수 있도록 만들었습니다. 컬렉션 프레임워크에서 제공하는 인터페이스 중 우리가 주로 살펴볼 것은 List, Set, Map이 있습니다.

 

인터페이스 구현 클래스 비고
Collection List ArrayList - 순서를 유지하고 저장
- 중복 저장 가능
Vector
LinkedList
Set HashSet - 순서를 유지하지 않음(집합)
- 중복 저장 불가능
TreeSet
Map HashMap - Key, Value의 쌍으로 저장
- Key는 중복 저장 불가
Hashtable
TreeMap
Properties

 

위의 분류를 한번 살펴보겠습니다. 우선 List와 Set은 기본적으로 인스턴스 추가, 삭제, 검색 방식이 유사하기 때문에 공통 메서드를 모아서 Collection 인터페이스로 별도로 정의해 두고 있습니다. 

 

Map은 K,V 형태로 사용하고 관리하는 구조로 되어 있어서 별도로 분류해 두었습니다. 그리고 각각의 인터페이스를 구현하는 구현 클래스도 존재하고 있습니다. 개별 사용법과 특성에 대해서는 하나씩 자세히 살펴보도록 하겠습니다.