본문 바로가기
JAVA

[JAVA] Chapter 16. Collection Framework (1)

by varcode 2023. 7. 21.

자바에서는 배열과 컬렉션(Collection) 두 가지 저장소를 사용한다. 배열은 인덱스를 사용하여 요소에 접근할 수 있고 연속된 메모리 공간에 요소를 저장하기 때문에 데이터의 접근이 빠르고 효율적이다. 그러나 배열은 크기를 동적으로 변경할 수 없으므로 초기에 지정한 크기보다 더 많은 데이터를 저장할 수 없다.

반면에 컬렉션은 크기를 동적으로 변경할 수 있으며, 다양한 종류의 데이터를 저장할 수 있다. 또한 컬렉션은 자체적으로 요소를 추가, 삭제, 검색, 정렬하는 기능을 제공하여 사용자가 직접 구현할 필요가 없다. 그러나 배열에 비해 데이터의 접근이 상대적으로 느리고, 메모리 공간도 더 많이 차지한다.

따라서 배열은 크기가 고정되어 있고 빠른 데이터의 접근이 필요할 때 사용하고, 컬렉션은 동적인 데이터 저장이 필요하고 요소의 추가. 삭제, 검색, 정렬 등의 기능이 필요할 때 사용한다. Collection을 사용하기 위해서는 java.util import 해야 한다. (단축키 : Ctrl + Shift + o, 클래스 이름만 적어주면 sun에서 만든 클래스, 같은 프로젝트 안에 있는 내가 만든 클래스 모두 import 해준다.)

 

Collection Framework라고 부르는 이유는 뭘까?
Collection
은 자료구조의 일종으로, 다수의 데이터를 저장하고 처리하는 기능을 제공하는 클래스들의 집합이다. Framework는 애플리케이션 개발을 위해 자주 사용되는 여러 기능을 미리 구현해 놓은 일종의 라이브러리다. 따라서 Collection이라는 클래스들이 미리 구현되어 있으므로 이를 활용하여 프로그램을 작성할 수 있게 되어, 이를 Collection Framework라고 부른다. 또한 Collection Framework는 매우 일관성 있게 설계되어 있어, 새로운 클래스를 추가하거나 기존 클래스를 수정할 때도 일관성을 유지하며 개발할 수 있도록 구성되어 있다. 이러한 이유로 Collection Framework라고 부른다.

 

이번 챕터에서 가장 최상위의 superCollection이다. 상속 관계를 살펴보면, List, Queue, Set Collection을 상속받는데, Map은 상속을 받지 않는다. (Collection, List, Queue, Set, Map은 전부 interface이다.)

List, Queue, Set Collection을 상속받는다는 것에서 Method Overriding을 사용할 것이며, 메서드 이름이 동일할 것이라는 추측을 할 수 있다. 반면 Map은 상속을 받지 않으므로 메서드의 이름이 다를 것이라는 추측을 할 수 있다.

 

Collection은 인스턴스"" 저장한다. (인스턴스를 직접 저장하는 것이 아니라 인스턴스의 주솟값을 저장한다는 의미이다.) 인스턴스를 생성하는 것은 배열을 제외하면 클래스, Collectionreference type만 저장한다. 그렇다면 기본 Data Type은 어떻게 저장할까? Collection의 구현체를 사용하여 기본 타입을 저장하기 위해서는 기본 타입을 해당 reference type으로 boxing해야 한다. 그래서 Wrapper Class가 존재하는 것이다. 기본 Data Type을 인스턴스로 생성하는 것이 Wrapper Class였다. Wrapper, Generic, Collection은 묶어서 공부하는 것이 좋다.

 

기존 저장소 배열의 단점과 그와 비교한 collection의 장점을 살펴보자.

int[] arr = new int[5];

코드를 보면 알 수 있듯이, 배열은 선언하는 시점에 크기를 정해야 한다. 크기를 미리 알 수 없는 경우 메모리를 넉넉하게 잡을 수 있지만, 할당된 공간을 사용하지 않는 경우 메모리 낭비가 발생한다. 또한 하나의 type 밖에 저장하지 못한다. 그래서 Class Type으로 배열을 잡는 것이다. 마지막으로, 배열을 사용하는 경우 삽입/삭제에 최악의 경우 O(n)의 시간 복잡도를 가진다.

 

'JAVA' 카테고리의 다른 글

[JAVA] Chapter 17. JDBC  (0) 2023.07.23
[JAVA] Chapter 16. Collection Framework (2)  (0) 2023.07.22
[JAVA] Chapter 15. Wrapper Class  (0) 2023.07.20
[JAVA] Chapter 14. VO Class  (0) 2023.07.19
[JAVA] Chapter 13. Exception Handling  (0) 2023.07.18

댓글