What is the Java Collections?

Java에서 Collection이란 개체 그룹을 저장(store)하고 조작(manipulate)하기 위한 아키텍처를 제공하는 프레임워크이다.

Java Collection Framework는 많은 인터페이스와 클래스를 제공한다.

  • Set
  • List
  • Queue
  • Dequeue
  • ArrayList
  • Vector
  • LinkedList
  • PriorityQueue
  • HashSet
  • LinkedHashSet
  • TreeSet

 

Hierarchy of Collection Framework

아래 그림은 Java Collection Framework의 계층구조이다. 

이들중에서 오늘은 ArrayList에 대해 알아보고 Array와 ArrayList의 차이점에 대해 알아볼 것이다.

 

 


Array

Java 공식문서에서 Array에 대한 설명은 다음과 같다.

public final class Array
extends Object
The Array class provides static methods to dynamically create and access Java arrays.
Array permits widening conversions to occur during a get or set operation, but throws an IllegalArgumentException if a narrowing conversion would occur.

 

번역하면 Array class는 자바 배열을 동적으로 생성하고 접근하는 정적 메소드를 제공한다.

Array는 get 또는 set 동작을 하는동안 확대 변화는 허용하지만 축소는 에러를 발생시킨다.

 

즉 Array를 선언할때 처음 초기화한 크기로 고정이 되며 변경할 수 없다는 것이다.

int[] arr = new int[3];

arr.append(); // X
arr.add(); // X
arr.insert(); // X
arr[3] = 0; // X

 

ArrayList

Java 공식문서에서 ArrayList에 대한 설명이 길어서 우선 ArrayList를 나타내는 코드를 가져왔다.

아래 코드를 보면 ArrayList는 List<E>, RandomAccess, Cloneable, Serializable을 상속한다.

이중에서 내가 아는것은 일단 List<E>이다. List를 상속한다는 뜻은 즉 List의 특징을 ArrayList가 갖게 된다는 의미이다. 

위에서 본 Hierarchy of Collection Framework 만 확인해도 List interface를 ArrayList가 상속하고 있는 것을 확인할 수 있다.

 

ArrayList는 초기화시 사이즈가 고정되고, 사이즈 변경이 불가능한 Array의 단점을 List<E> 상속으로 없앴다고 볼 수 있다.

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

 

Array vs ArrayList

Array ArrayList
사이즈가 초기화시 고정된다. 초기화시 사이즈를 표기하지 않으며, 크기가 가변적이다.
초기화시 메모리에 할당되어 ArrayList보다 속도가 빠르다. 데이터 추가 삭제시 메모리를 재할당하기 때문에 Array보다 속도가 느리다.
사이즈 변경이 불가능하다. 추가, 삭제 기능이 있어 
사이즈 변경이 가능하다.
다차원 선언이 가능하다. 다차원 선언이 불가능하다.

 


Array vs ArrayList 어떤것을 사용해야 할까?

코드를 짜는 상황에 따라 다를 것이다. 

만약 어떤 상황에서든 고정적인 크기를 갖는 변수라면 Array를 사용하는 것이 더 좋을 것이고, 상황에따라 다르거나 가변적이라면 ArrayList를 사용하는 것이 더 좋을 것이다.

일반적으로 ArrayList를 사용하는 상황이 더 많을 것이라고 예상된다.

 

또한 ArrayList의 경우 항목을 빠르게 추가 하기 위해서 메로리의 약 2배를 할당한다. 만약 ArrayList 선언 후 항목을 추가하지 않는다면 메모리가 낭비되는 일이 발생하게 된다. 이렇게 항목이 추가될 경우가 없는 고정적인 변수가 필요한 경우에는 Array, 항목 추가가 필요한 경우는 ArrayList를 상황에 따라 사용하는 것이 적합하다.

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 생성자  (0) 2023.10.25
[JAVA] 값 복사와 주소 복사  (0) 2023.10.25
[JAVA] 테스트코드 작성하기  (1) 2023.10.24
[JAVA] 메소드 Method  (0) 2023.10.19
[JAVA] 패키지  (0) 2023.10.19

+ Recent posts