IT 개발/Java

[Java] 자바 - Collection이란? (컬렉션과 제네릭)

KADOSHOLY 2022. 7. 24. 08:10
반응형

 

자바 - Collection이란? (컬렉션과 제네릭)

 

 

컬렉션(collection)은 많은 데이터 요소를 효율적으로 관리하기 위한 자료구조를 말하며, ArrayList, LinkedList, HashMap 등이 여기에 포함됩니다. 그리고 이 컬렉션들은 제네릭(generics) 형식으로 구현되어 있어 컬렉션과 함께 제네릭에 대해서도 알아둘 필요가 있습니다. 

 

 

   목차

  1. 컬렉션(collection)이란?
  2. 컬렉션의 종류
  3. 컬렉션의 특징
    •  Collection 인터페이스의 주요 메서드
  4. 제네릭(generics)이란?

 

 

1. 컬렉션(collection)이란?

 

컬렉션(collection)이란 많은 수의 데이터를 그 사용 목적에 적합한 자료구조로 묶어 하나로 그룹화한 객체를 말합니다. 자바에서는 이러한 컬렉션을 위한 인터페이스와 클래스들이 있으며 자주 사용되는 클래스들의 종류와 상속 계층도는 아래와 같습니다. 

 

collection 상속도 - queue, list, set, map, stack
Collection 상속도

 

 

2. 컬렉션의 종류

 

컬렉션의 종류는 ArrayList, LinkedList, Vector, Stack, HashSet, TreeSet, HashMap, TreeMap 등이 있으며, 크게 아래와 같은 자료구조 유형에 따라 구분됩니다. 

 

  1. List : 이름과 같이 목록처럼 데이터를 순서에 따라 관리합니다. 
  2. Set : 중복이 허용되지 않는 데이터를 관리합니다. 
  3. Map : 데이터를 Key와 Value로 짝을 이루어 관리하며, Key값은 중복을 허용하지 않습니다. 
  4. Queue : 데이터 In / Out 순서를 FIFO 방식으로 관리합니다. (FIFO : First In First Out)
  5. Stack : 데이터 In / Out 순서를 LIFO 방식으로 관리합니다. (LIFO : Last In First Out)

 

 

 

3. 컬렉션의 특징 

 

컬렉션 클래스들이 데이터를 다룰 때 그 데이터는 기본적으로 객체만 가능합니다. 따라서 char, int, float와 같은 기본형은 사용할 수 없고 대신 Wrapper클래스를 사용해야 합니다. 하지만, 오토박싱(auto boxing)과 오토언박싱(auto unboxing)으로 인해 사용자는 마치 기본형을 다룰 수 있는 것처럼 사용할 수 있습니다. 

컬렉션과 관련된 인터페이스 또는 클래스가 정의되어 있는 코드를 살펴보면 아래와 같이 제네릭(generics) 형태로 구현되어 있는 것을 확인할 수 있습니다. 따라서 사용자는 사용하고자 하는 데이터 타입을 지정하여 사용할 수 있습니다. 

 

public interface List<E> extends Collection<E> {   ...   }

 

 

List, Set, Queue는 공통분모로 Collection 인터페이스를 상속받고 있으며, Collection 인터페이스가 가지는 주요 메서드는 아래와 같습니다. 

 

1) Collection 인터페이스의 주요 메서드

  1. boolean add(E e) : 현재 컬렉션에 데이터 객체 e를 추가합니다. 
  2. boolean addAll(Collection<? extends E> c) : 현재 컬렉션에 컬렉션 c의 모든 데이터를 추가합니다. 
  3. boolean contains(Object o) : 현재 컬렉션에 객체 o의 포함 여부를 반환합니다.
  4. boolean containsAll(Collection<?> c) : 현재 컬렉션에 컬렉션 c의 모든 데이터가 포함되어있는지 여부를 반환합니다. 
  5. boolean remove(Object o) : 현재 컬렉션에서 객체 o를 삭제합니다. 
  6. boolean removeAll(Collection<?> c) : 현재 컬렉션에서 컬렉션 c와 일치하는 데이터를 삭제합니다. 
  7. boolean retainAll(Collection<?> c) : 현재 컬렉션에서 컬렉션 c와 일치하는 데이터만 남기고 나머지는 삭제합니다. 
  8. void clear( ) : 현재 컬렉션의 모든 데이터를 삭제합니다.  
  9. int size( ) : 현재 컬렉션에 포함된 데이터 개수를 반환합니다. 
  10. boolean isEmpty( ) : 현재 컬렉션이 비어있는지 여부를 반환합니다.  
  11. Iterator<E> iterator( ) : 현재 컬렉션의 모든 요소에 대한 iterator를 반환합니다. 
  12. Object[ ] toArray( ) : 현재 컬렉션에 저장된 데이터를 Object 배열로 반환합니다. 
  13. <T> T[ ] toArray(T[ ] a ) : 현재 컬렉션에 저장된 데이터를 배열 a에 담고 배열 a를  반환합니다.  

 

 

 

4. 제네릭(Generics)이란?

 

제네릭(generics)은 한 번의 정의로 여러 종류의 데이터의 타입을 다룰 수 있도록 하는 방법을 말합니다. 예를들어 아래와 같이 ArrayList<E> 형태로 클래스가 정의되어 있다면, 사용자는 데이터로 String을 사용할 때는 ArrayList<String>으로, Integer를 사용할 때는 ArrayList<Integer>로 지정하여 사용할 수 있습니다. 

이처럼 사용자가 사용시에 데이터 타입을 지정하게 되면 컴파일 단계에서 데이터 타입을 미리 체크할 수 있는 장점이 있습니다. 

 

public class ArrayList<E> extends AbstractList<E>
                implements List<E>, RandomAccess, Cloneable, java.io.Serializable

{

     ...

}

 

(사용예시1)  ArrayList<String> a1 = new ArrayList<String>( );

(사용예시2)  ArrayList<Integer> a2 = new ArrayList<Integer>( );

 

 

반응형