[그린컴퓨터] Server/JAVA(자바 JDK)

컬렉션 프레임워크 실습 { Collection 인터페이스 - List 인터페이스 - ArrayList & Vector 클래스, 스레드와 멀티스레드 }

Ben의 프로그램 2023. 7. 20. 10:33
728x90
ArrayList 와 Vector 클래스
Vector는 자바 2 이전부터 제공했으며 ArrayList 처럼 배열을 구현한 클래스입니다. ArrayList 와 Vector 의 가장 큰 차이는 동기화 지원 여부입니다. 동기화(synchronization)란 두 개 이상의 스레드가 동시에 Vector를 사용할 때 오류가 나지 않도록 실행 순서를 보장하는 것입니다. 

 

스레드와 멀티스레드 프로그래밍
스레드란 간단히 말하면 작업 단위입니다. 프로그램이 메모리에서 수행되려면 스레드 작업이 생성되어야 합니다. 이때 하나의 스레드만 수행되면 단일 스레드(single thread)라고 하고 두 개 이상의 스레드가 동시에 실행되는 경우를 멀티스레드(multi-thread)라고 합니다. 두 개 이상의 스레드가 동시에 실행되면 같은 메모리 공간(리소스)에 접근하기 때문에 변수 값이나 메모리 상태에 오류가 생길 수 있습니다. 이때 메모리에 동시에 접근하지 못하도록 순서를 맞추는 것이 동기화입니다. 두 작업이 동시에 실행되는 멀티스레드 환경이 아닌 경우에는 ArrayList를 사용하도록 권장합니다. 왜냐하면 동기화를 구현하기 위해서는 동시에 작업이 이루어지는 자원에 대해 잠금(lock)을 수행하기 때문입니다. 즉 메서드를 호출할 때 배열 객체에 잠금을 하고, 메서드 수행이 끝나면 잠금을 해제한다는 뜻입니다. 이렇게 Vector 의 모든 메서드는 호출될 때마다 잠금과 해제가 일어나므로 ArrayList보다 수행 속도가 느립니다. ArrayList 를 사용해서 구현했는데 나중에 프로그램에서 동기화가 필요하다면 Vector로 바꾸지 않고 다음과 같이 ArrayList 생성 코드를 쓰면 됩니다. 
Collections.synchronizedList(new ArrayList<String>( ));