Vector는 기본적으로 ArrayList와 동일한 구조를 갖고 있습니다. 그래서 생성, 사용 방식 자체는 ArrayList와 크게 다르지 않습니다.
List<E> list = new Vector<E>();
그럼, ArrayList와 동일한 형태인데 굳이 Vector를 사용해야 하는 이유가 있을까요? 간단하게 요약하면, 이것은 Thread Safe - 즉, 스레드 상황에서 안전성을 보장하기 때문입니다. ArrayList와 다른 점은 Vector의 경우 동기화된(synchronized) 메서드로 구성되기 때문에 멀티 스레드일 경우, 동시에 이 메서드를 실행할 수 없다는 특징을 갖습니다.
즉, 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다는 것이죠. 결국 멀티 스레드에서 안전하게 객체를 추가하거나 삭제할 수 있다는 장점을 갖게 됩니다. 하나 이상의 스레드가 동시에 접근하지 못하기 때문에, 멀티 스레드 상에서 안전한 객체 정보 처리가 필요할 경우에 사용하게 되지요.
아래의 예제를 통해서, [Board]라는 게시물에 대한 정보(게시물 1개) 객체가 있다고 가정하고, 이를 Vector를 통해서 관리하는 방법을 살펴보겠습니다.
public class Board {
String subject;
String content;
String writer;
public Board(String subject, String content, String writer) {
this.subject = subject;
this.content = content;
this.writer = writer;
}
}
import java.util.*;
public class ExampleMain {
public static void main(String[] args) {
List<Board> list = new Vector<Board>();
list.add( new Board("제목1", "내용1", "글쓴이1") );
list.add( new Board("제목2", "내용2", "글쓴이2") );
list.add( new Board("제목3", "내용3", "글쓴이3") );
list.add( new Board("제목4", "내용4", "글쓴이4") );
list.add( new Board("제목5", "내용5", "글쓴이5") );
list.remove(2); // 제목3 삭제되고 뒤의 인덱스 하나씩 당겨짐
list.remove(3); // 3번 인덱스가 된 제목5 삭제
for(int i = 0; i < list.size(); i++) {
Board board = list.get(i);
System.out.println(board.subject + "\t" + board.content + "\t" + board.writer);
}
}
}
/* 출력
제목1 내용1 글쓴이1
제목2 내용2 글쓴이2
제목4 내용4 글쓴이4
*/
'Programming > JAVA' 카테고리의 다른 글
컬렉션 프레임워크(3) - Set 컬렉션 2 : HashSet [1/2] (0) | 2023.11.26 |
---|---|
컬렉션 프레임워크(3) - Set 컬렉션 1 : Set의 개념 (1) | 2023.11.14 |
컬렉션 프레임워크(2) - List 컬렉션 3 : Linked List (1) | 2023.10.30 |
컬렉션 프레임워크(2) - List 컬렉션 2 : ArrayList (1) | 2023.10.26 |
컬렉션 프레임워크(2) - List 컬렉션 1 : List의 개념 (0) | 2023.10.11 |