본문 바로가기

Java

String[]을 List , List를 String[] 배열로 변환

자바에서 기본적으로 배열을 사용하고자 하면 크기를 할당해야 한다.


동적배열을 사용하고자 한다면 동적배열을 지원하는 List로 만들고 그걸 배열로 변환하여 사용할 수 있다.



[펌] 미주엘의 개발 이야기

자바에는 동적인 배열을 제공하는 클래스들이 여러가지가 존재한다. 제일 흔하게 볼 수 있는 것이 ArrayList 이다.

ArrayList를 예로들어 자바의 동적인 배열에 대해 설명하도록 하겠다.

자바에서는 동적으로 메모리 공간을 할당하지 못한다. 간단히 자바의 모든 배열은

int list[] = 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를 통하여
 
기존의 데이터를 새로운 배열에 저장하여 배열의 크기가 동적으로 변경된 것처럼 보여지도록 하고있다.

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

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

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


'Java' 카테고리의 다른 글

jar 압축하기  (0) 2016.10.23
HTML 파서기 JSoup  (0) 2016.09.01
log4j.xml 한글 설정  (0) 2016.03.23
java.sql.Date <==> java.util.Date  (0) 2016.03.19