728x90
Vector
- Vactor 클래스를 사용하려면 import java.util.Vector; 적어야함
- 예전 Vector클래스는 Collections 프레임워크가 포함되어 있지 않았으나 지금은 재구성 및 설계되어 Collections 프레임 워크와 완전히 호환됨
- List 인터페이스를 구현한 클래스
- 객체들을 삽입, 삭제, 검색할 수 있는 콘테이너 클래스
- 필요에 따라 크기를 동적으로 조절할 수 있는 동적 배열
- 동기화(Thread Safe) 되어있으며, 한번에 하나의 스레드만 벡터의 메소드 호출 가능
- 내부적으로 여러개의 스레드가 접근할 때 데이터 안정성을 위해 한개의 스레드씩 순차적으로 처리할 수 있도록 동기화 되어있음. 안정성이 보장하는 만큼 일을 많이 처리한다는 의미이며, 메모리를 많이 사용
- List 인터페이스 상속을 받음
ArrayList
- Collections 프레임워크의 일부
- ArrayList 를 사용하려면 imoprt java.util.ArrayList; 적어야함
- Vector처럼 동적 배열을 사용하기 위해 사용됨
- 기본 데이터 타입(int, char 등)에 대해 만들 수 없기에 Integer, Object 등의 객체에 대해 참조해서 사용해야함
- List 인터페이스 상속을 받음
- 동기화가 되어있지 않기 때문에 여러개의 스레드에서 접근할 때 필요에 따라 동기화 처리를 해줘야함
동기화
- 쓰레드가 하나의 자원을 놓고 싸우지 말고 락을 가진 쓰레드부터 차례대로 그 자원을 쓰고 다음 쓰레드에게 락과 함께 자원 반납 하는 것
- 주의할 점은 동기화를 안해도 되는 부분을 괜히 동기화하며 쓰레드가 하나밖에 수행되지 못하니깐 잘 판단할 것
- 동기화하는 방법은 메서드를 동기화하거나 블럭을 동기화할 수 있는데 동기화된 메서드를 호출하는 것이 동기화된 블록을 호출하는것보다 약간 빠름
■ 차이점 ㅡ 가장 중요한 차이점은 동기화 유무
□ 동기화
ArrayList는 동기화가 되어있지 않지만 Vector는 동기화가 되어있음
ArrayList는 멀티 쓰레드(Multi-Thread)에서 작업이 가능하지만 Vector는 단일 스레드에서만 사용 가능
□ 배열 길이 증가
최대 인덱스를 초과했을 때 추가되는 인덱스 수가
Vector는 현재 배열 크기의 100%(2배) 증가
ArrayList는 현재 배열의 크기 50% 증가
□ 동기, 비동기
ArrayList는 비동기여서 많은 스레드가 동시에 작동할 수 있음. Vector는 한번에 하나의 스레드만 작동 가능
그러므로 성능은 ArrayList가 더 나음
ArrayList에서 여러 스레드가 동시에 엑세스(접근)하는 경우 개발자가 명시적으로 동기화하는 코드를 추가해야함
□ 스레드 안전 (Thread Safe)
스레드 안전이란, 멀티 스레드 프로그래밍에서 여러 스쿼드가 동시에 접근이 이루어져도 프로그램 실행에 문제가 없음을 뜻함
Vector는 동기화 되어있기 때문에 한 번에 하나의 스레드만 접근할 수 있기 때문에 안전함
ArrayList는 동기화되지 않았기에 명시적으로 동기화할 필요성 있음
결론
ArrayList와 Vector의 기능은 서로 비슷함. 그러니 사용하는 메소드도 거의 비슷
ArrayList가 비동화이기에 동기화된 Vector보다 더 빠름
멀티스레드 환경이 아닌 경우 ArrayList 를 사용하는것이 좋음
단일 스레드 작업시 동기화가 필요없으므로 같은 동작을 하는 ArrayList 를 사용하는것이 성능적으로 유리
꼭 사용해야할 이유가 없다면 ArrayList를 사용할 것
728x90
'[자바] > 자바 문법' 카테고리의 다른 글
[Java] String 클래스의 메서드 replace 와 replaceall 메서드 차이 (0) | 2021.11.01 |
---|---|
[Java] 배열 복사 Arrays.copyOf() vs System.arraycopy() (0) | 2021.10.31 |
[Java] return (0) | 2021.10.23 |
[Java] 메모리 구조 (static, stack, heap) (0) | 2021.10.22 |
[Java] autoboxing, unboxing 이란? (0) | 2021.10.22 |