본문 바로가기

Language/Java

Collection이란?

반응형

자바에서는 배열을 사용해서 데이터 타입이 같은 데이터들을 하나의 변수로 묶어 관리합니다. 배열의 장점은 많은 양의 데이터를 한 번에 관리할 수 있고 반복문과 결합해 단순 반복적인 효율적으로 처리할 수 있다는 것입니다

하지만 배열에는 단점 또한 존재 합니다

1. 배열을 선언하면 배열의 크기를 초기에 설정하고 이후에 변경이 불가능하다.
2. 데이터를 검색하는 과정에서 시간이 많이 걸린다.
3. 같은 기본형 데이터 타입의 자료형만 저장할 수 있다.

배열의 문제점을 해결하기 위해 나온 개념이 Collection입니다.

1. Collection 이란?

Collection은 간단히 말해 객체들의 집합이자 자료구조를 의미합니다. 객체들을 한 곳에 저장하고 관리하는데 목적을 두고 있습니다.

ArrayList<Integer> arrayLsit = new ArrayList<Integer>(); 
arrayList.add(1); 
arrayList.add(2); 
arrayList.get(0); // 1


위의 코드는 Collection의 한 예제인 ArrayList 사용 예시입니다.

다양한 Collection의 종류와 사용 방법에 대한 자세한 내용은 Java Documentation을 참고하는 게 가장 좋습니다.

Collection (Java SE 15 & JDK 15)

Type Parameters: E - the type of elements in this collection All Superinterfaces: Iterable All Known Subinterfaces: BeanContext, BeanContextServices, BlockingDeque , BlockingQueue , Deque , EventSet, List , NavigableSet , Queue , Set , SortedSet , Transfer

docs.oracle.com


다시 돌아와 Collection에서 주의 깊게 봐야 할 점이 있습니다. Collection의 개념에 대한 문장 중 객체들의 집합이라고 표현한 부분입니다

ArrayList<Integer> arrayList = new ArrayList<Integer>();


Collection은 특정 클래스 객체들을 저장하는 집합이기 때문에 ArrayList의 타입이 Wrapper Class인 Integer로 되어있습니다.

arrayList.add(1); arrayList.get(0);


어떻게 1을 저장했으며, 0번째 객체를 불러올 수 있는지에 대해서입니다. 두 수는 모두 int 형 타입의 데이터로 Primitive type 데이 터지 객체가 아니기 때문입니다.

이것이 가능하 이유는 ArrayList에 Primitive type 데이터를 넣을 때 auto Boxing , 데이터를 불러올 때 auto unBoxing 되기 때문입니다.


2. Collection의 장점

Collection의 장점은 이전의 Array의 단점을 보완하는 방향으로 생각할 수 있습니다.

1. Collection의 자료구조는 메모리의 크기를 미리 정하지 않고 메모리에 데이터를 넣을 때마다 그 크기가 변한다.
2. 데이터를 검색하는 과정에서 시간을 단축시킬 수 있다.
3. 객체를 저장할 수 있다.

3가지의 장점을 예시를 들어가면 정리해 보겠습니다.


1. Collection의 자료구조는 메모리의 크기를 미리 정하지 않고 메모리에 데이터를 넣을 때마다 그 크기가 변한다.

ArrayList<Integer> arrayLsit = new ArrayList<Integer>(); // 0 System.out.println(arrayList.size()); arrayList.add(1); // 1 System.out.println(arrayList.size()); arrayList.add(2); // 2 System.out.println(arrayList.size()); arrayList.removeAll(); //0 System.out.println(arrayList.size());

위의 예시에서 값을 추가하거나 삭제할 때마다 arrayList의 크기가 변하는 것을 알 수 있습니다. 즉, Collection은 유동적으로 메모리에 값을 추가하거나 삭제하는 것이 가능합니다.

2. 데이터를 검색하는 과정에서 시간을 단축시킬 수 있다.

Map<String, Integer> map = new HashMap<String, Integer>(); map.put("JAVA", 1); map.put("PYTHON", 2); map.get("JAVA");


다음의 코드 예시는 Map 자료구조에 대한 예시이다. Map은 기본적으로 자료구조가 key와 value의 1:1 대응으로 이루어져 있습니다. 여기서 JAVA라는 key는 1이라는 value를 갖고 있는 것이다.

기존의 String type의 Array에서 JAVA라는 데이터를 찾기 위해서는 반복문과 조건문을 사용하면서 데이터를 비교하는 작업을 해야 했기에 시간을 많이 사용해야 하는 단점이 있었습니다.

하지만 Map 자료형을 사용하면 JAVA에 해당되는 값을 찾기 위해 한 번의 검색만으로 데이터를 찾는 것이 가능해졌기 때문에 데이터의 검색 시간을 단축할 수 있습니다.

3. 객체를 저장할 수 있다.

ArrayList<Car> cars = new ArrayList<Car>();


배열은 Primitive type이 같은 데이터 만을 저장할 수 있었지만 Collection의 경우에는 위와 같은 Car라는 Class 객체를 저장할 수 있습니다.


이번 글에서는 Collection에 대해 기본 개념에 대해 정리했습니다. 잘못된 부분이 있다면 댓글로 남겨주세요!

반응형