안녕하세요 열코입니다.


이번에는 자바에서 크기가 동적인 배열을 사용할 때 주로 사용하는 

두가지 클래스 벡터(Vector)와 어레이리스트(ArrayList)에 대해 

비교분석 해보겠습니다.


먼저 벡터에 대한 설명입니다.


☞ Vector란?

- 벡터 클래스는 예전의 자바에서 제공했던 레거시 클래스입니다.

- 레거시 클래스란 Collections 프레임워크가 포함되어 있지 않던 초기 자바 버전에서 정의한 인터페이스입니다.

- 현재는 재구성 및 설계되어서 현재의 Collections 프레임워크와 완벽하게 호환됩니다.


 Vector의 특징

- 필요에 따라 크기를 동적으로 조절할 수 있는 동적배열을 구현합니다.

- 배열과 마찬가지로 정수 인덱스를 이용하여 배열에 액세스 할 수 있습니다.

- 동기화(Thread Safe) 되어있으며 한번에 하나의 스레드만 벡터의 메소드를 호출 할 수 있습니다.


※ 벡터에 대한 사용법은 추후에 포스팅하겠습니다.



다음 어레이리스트에 대한 설명입니다.


☞ ArrayList란?

- Collections 프레임워크의 일부이며 java.uitl 패키지 내에 존재합니다.

- 벡터와 마찬가지로 동적 배열을 사용하기 위해 사용됩니다.


☞ ArrayList의 특징

- 자바 표준 배열보다 약간 느릴수 있지만 배열에서 많은 조작이 필요로할때 유용하게 사용됩니다.

- 기본 데이터 타입(int, char 등)에 대해 만들수 없기때문에 Integer, Object 등의 객체에 대해 참조해서 사용합니다.


※ 어레이리스트에 대한 사용법은 추후에 포스팅하겠습니다.



이렇게 비슷한 두 클래스 벡터와 어레이리스트의 차이점은 무엇이며 어떤 상황에서 어떤 클래스를 사용 야 하는

지에 대해 알아보겠습니다.

실제로 두 클래스는 많은 차이점이 있지만 이 포스트에서는 주요 차이점에 대해서만 언급하겠습니다.


ArrayList와 Vector의 주요 차이점


1. 동기화(Synchronize)

Vector가 동기화 된다면 ArrayList는 동기화가 되지않은 상태입니다.

쉽게말해 Vector는 한번에 하나의 스레드만 엑세스(접근) 가능하며, ArrayList는 동시에 여러 스레드가 

작업할 수 있습니다.

ArrayList에서 여러 스레드가 동시에 엑세스하는 경우 개발자가 명시적으로 동기화하는 코드를 추가해야합니다.



2. 스레드 안전(Thread Safe)

스레드 안전이란 멀티 스레드 프로그래밍에서 여러 스레드가 동시에 접근이 이루어져도 프로그램 실행에 

문제가 없음을 뜻합니다.

앞서 말했듯이 Vector는 동기화 되어있기 때문에 한번에 하나의 스레드만 접근할 수 있기때문에 스레드 

안전합니다.

ArrayList는 동기화되지 않았기 때문에 명시적으로 동기화 할 필요가 있습니다.

 

3. 성능

ArrayList는 동기화 되지않았기 때문에 동기화 된 벡터보다 더 빠릅니다.


4. 크기 증가

Vector와 ArrayList 모두 동적 배열 클래스로 최대 인덱스를 초과할 때 추가되는 인덱스 수가 다릅니다.

Vector는 현재 배열의 크기의 100%가 증가하며, ArrayList의 경우 현재 배열의 크기의 50%가 증가합니다.



★ 결론

멀티스레드 환경이 아닌 경우 ArrayList를 사용하는것이 바람직합니다.

Vector를 사용하기 위한 명시적 요구 사항이 없는경우 ArrayList를 사용하도록 합시다.



이상 '자바 벡터와 어레이리스트의 비교'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.




to Top