반응형

코딩을 하다가 왜 배열을 사용하지 않고 ArrayList를 사용하는지 궁금증이 생겼고 인터넷에 검색을 해 보았다.


사용하는데 가장 큰 이유는 동적배열로 만들 수 있다는 점이였다.


자바에서 배열은 int[] arr = new int[10]; 등으로 정적배열 밖에 선언이 되지 않는다.


그렇기 때문에 배열의 크기를 동적으로 할당하고 싶을 때 Arraylist를 사용하면 된다.


ArrayList의 사용 원리는 다른 블로그에서 찾아 보았다.




ArrayList 사용원리


ArrayList 의 원문소스를 들여다보면 데이터를 저장하는 공간으로 다음과 같은 배열을 사용한다.


private transient E[] elementData;


그냥 단순한 배열을 사용한다는 것을 알 수 있다. ArrayList의 Method 중에서 add(Object o)라는 살펴보면


다음과 같은 원리로 동적배열을 제공하고 있다.


Object oldData[] = elementData;


elementData = (E[])new Object[newCapacity];


System.arraycopy(oldData, 0, elementData, 0, size);


add() 함수에서 보면 자바에서는 동적인 배열을 처리하기위해 새로운 배열을 생성하여 arraycopy를 통하여

 

기존의 데이터를 새로운 배열에 저장하여 배열의 크기가 동적으로 변경된 것처럼 보여지도록 하고있다.


그리고 한가지 더 설명하자면 배열이 동적으로 크기가 변할때마다 새로운 배열을 생성하는 작업이 발생하는 것을


방지하기 위해 임의로 사용자가 사용하고 있는 배열보다 더 큰 크기의 배열을 생성하여 버퍼공간을 가지도록 


새로운 배열을 생성하여 사용한다.


출처: http://devhome.tistory.com/16 [미주엘의 개발이야기]


반응형

+ Recent posts