새소식

인기 검색어

Programming/Java

[Java] Collections, Collection

  • -

Java의 배열과 리스트를 공부하던 중, Collections가 지속적으로 나와서 이건 어떤 클래스일까? 라는 궁금증에서 공부가 시작되었다.

자료들을 찾다보니 기존에 사용했던 Collections는 '클래스'였다. 하지만 Collection이라는 개념도 존재했고 혼동해서 사용할 가능성이 있어 확실히 알고 가고자 한다.


1. Collection

자바에서 컬렉션(Collection)은 컬렉션 프레임워크(Collection framework)를 의미한다.

그럼 Collection framework란 무엇일까?

다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미

즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것을 의미한다.

이러한 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현된다.

 

2. Collection의 주요 인터페이스

컬렉션 프레임워크에서는 데이터를 저장하는 자료 구조에 따라 다음과 같은 핵심이 되는 인터페이스를 정의하고 있다.

 

1. List

2. Set

3. Map

 

List와 Set 인터페이스는 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별로도 정의한다.

 

 

3. 주요 인터페이스 관계 및 특징

 

인터페이스 설명 구현 클래스
List<E> 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함 ArrayList
LinkedList
Stack
Queue
Vector
Set<E> 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. HashSet
TreeSet
Queue<E> 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. 선입선출(FIFO) LinkedList
PriorityQueue
Map<K,V> 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음. HashMap
TreeMap
Hashtable
Properties

 

각각의 인터페이스에 대해서 조금 더 알아보자.

 

3.1 Set 인터페이스

 

순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.

클래스 설명
HashSet - 가장빠른 임의 접근 속도
- 순서를 예측할 수 없음
TreeSet - 정렬방법 지정 가능함

 

3.2 List 인터페이스

 

순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.

클래스 설명
ArrayList - 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남
LinkedList - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용
- 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
Vector - 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지 않고 무거움

3.3 Map 인터페이스

 

키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로,

순서는 유지되지 않으며 키의 중복을 허용하지 않으나 값의 중복은 허용한다.

 

클래스 설명
Hashtable - HashMap보다는 느리지만 동기화 지원
- null 불가
HashMap - 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
TreeMap - 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름

 

4. Collections

컬렉션 프레임워크(Collection framework)에 대해 알아보았다.

그럼 Collectinos는 무엇일까?  Collections은 클래스이다.

그럼 컬렉션 프레임워크와 어떤 관계가 있을까?

컬렉션 프레임워크에 속하는 인터페이스들을 알아봤었다. 이 인터페이스들을 구현한 클래스를 컬렉션 클래스(collection class)라고 한다.

 

컬렉션 프레임워크의 모든 컬렉션 클래스는 List와 Set, Map 인터페이스 중 하나의 인터페이스를 구현하고 있다.

또한, 클래스 이름에도 구현한 인터페이스의 이름이 포함되므로 바로 구분할 수 있다.

 

Vector나 Hashtable과 같은 컬렉션 클래스는 예전부터 사용해 왔으므로, 기존 코드와의 호환을 위해 아직도 존재한다.

하지만 기존에 사용하던 컬렉션 클래스를 사용하는 것보다는 새로 추가된 ArrayList나 HashMap 클래스를 사용하는 것이 성능 면에서 더 좋은 결과를 얻을 수 있다.

 

5. Collections 인터페이스

List와 Set 인터페이스의 많은 공통 부분을 Collectino 인터페이스에서 정의하고, 두 인터페이스는 그것을 상속받는다.

따라서 Collection 인터페이스는 컬렉션을 다루는데 가장 기본적인 동작을을 정의하고, 그것을 메소드로 제공하고 있다.

 

Collection 인터페이스에서 제공하는 주요 메소드는 다음과 같다.

 

메소드 설명
boolean add(E, e) 해당 컬렉션(Collection)에 전달된 요소를 추가함
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 타입의 배열로 반환함

 

'Programming > Java' 카테고리의 다른 글

[JAVA] 상속  (0) 2022.12.08
[Java] 내부(inner) 정적 클래스  (0) 2022.11.30
[Java] Arrays  (0) 2022.11.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.