hayu's 개발 일지

99클럽 코테 스터디 5일차 TIL + Vector VS ArrayList 본문

자료구조&알고리즘

99클럽 코테 스터디 5일차 TIL + Vector VS ArrayList

hayu00 2024. 5. 25. 21:38

학습 키워드

- Vector VS ArrayList

 

공부한 내용

Vector VS ArrayList

 

Vector

  • import java.util.Vector;
  • List 인터페이스를 구현한 클래스이다.
  • 객체들을 삽입, 삭제, 검색할 수 있는 컨테이너 클래스이다.
  • 필요에 따라 크기를 동적으로 조절할 수 있는 동적배열이다.
  • 동기화(Thread Safe) 되어있으며, 한번에 하나의 스레드만 벡터의 메소드 호출 가능하다.
  • 내부적으로 여러개의 스레드가 접근할 때 데이터 안정성을 위해 한개의 스레드씩 순차적으로 처리할 수 있도록 동기화되어 있다.

→ 안정성이 보장하는 만큼 일을 많이 처리한다는 의미이며, 메모리를 많이 사용한다.

  • List 인터페이스 상속을 받는다.

ArrayList

  • imoprt java.util.ArrayList;
  • 컬렉션 프레임워크의 일부이다.
  • Vector 처럼 동적 배열을 사용하기 위해 사용된다.
  • 기본 데이터 타입(int, char 등)에 대해 만들 수 없기에 Integer, Object 등의 객체에 대해 참조해서 사용해야한다.
  • 객체들을 삽입, 삭제, 검색할 수 있는 컨테이너 클래스이다.
  • List 인터페이스 상속을 받았다.
  • 동기화가 되어 있지 않기 때문에 여러개의 스레드에서 접근할 때 필요에 따라 동기화 처리를 해줘야 한다.

동기화

  • 멀티 스레드 환경에서 여러 스레드가 하나의 자원(변수, 객체 등)을 놓고 동시에 접근하지 못하도록 조절하는 방법이다.
  • 이를 통해서 데이터의 일관성을 유지하고 스레드 간의 경쟁 상태를 방지할 수 있다.
  • 락(Lock) : 스레드가 자원을 사용하기 전에 얻는 키 같은 것을 말한다. 락을 얻은 스레드만 자원을 사용할 수 있으며 사용이 끝나면 락을 반납한다.
  • 경쟁 상태(Race Condition) : 여러 스레드가 동시에 자원에 접근할 때 발생하는 문제로, 잘못된 결과를 초래할 수 있다.

차이점 - 가장 큰 차이점은 동기화 유무이다.

동기화

  • ArrayList는 동기화가 되어있지 않고 Vector는 동기화가 되어있다.
  • ArrayList는 멀티 쓰레드(Multi-Thread)에서 작업이 가능하지만 Vector는 단일 스레드에서만 사용 가능하다.

동기, 비동기

  • ArrayList는 비동기여서 많은 스레드가 동시에 작동할 수 있다.
  • Vector는 한번에 하나의 스레드만 작동 가능하다.

→ 성능은 ArrayList가 더 낫다.

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

스레드 안전(Thread Safe)

  • 스레드 안전이란, 멀티 스레드 프로그래밍에서 여러 스레드가 동시에 접근이 이루어져도 프로그램 실행에 문제가 없음을 뜻한다.
  • Vector는 동기화 되어있기 때문에 한 번에 하나의 스레드만 접근할 수 있기 때문에 안전하다.
  • ArrayList는 동기화되지 않았기에 필요하다면 명시적으로 동기화해야 한다.

결론

  • ArrayList와 Vector의 기능은 서로 비슷하고 사용하는 메서드도 거의 비슷하다.
  • ArrayList가 비동기화이기 때문에 동기화된 Vector보다 더 빠르다.
  • 멀티스레드 환경이 아닌 경우 ArrayList 를 사용하는것이 좋다.
  • 단일 스레드 작업시 동기화가 필요없으므로 같은 동작을 하는 ArrayList 를 사용하는것이 성능적으로 유리하다.

 

회고

발생한 문제

- Vector에 대해 공부했었는데 스레드의 동기화에 대해 어렵다는 생각과 그 부분에 대한 공부가 부족하다고 느꼈다.

 

해결 방법

- Vector 스레드 동기화에 대해 공부해 보았다. 

- 공부해도 어렵게만 느껴지지만, 그래도 한번 공부하고 넘어간 것이 좋았다.

 

알게된 내용

- Vector 스레드 동기화에 대해 알게 되었고, ArrayList와의 차이가 무엇인지 알게 되었다.

 

 

참고 자료

- https://jroomstudio.tistory.com/4