Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- github
- 배열
- HTML
- css
- 프로그래머스
- Til
- 회고
- 이진 탐색(binary search)
- Entity
- 99클럽
- 자바
- 면접(java
- 항해99
- wil
- GIT
- 정렬 알고리즘(sort algorithm)
- 코딩공부
- aop
- 자료구조
- ArrayList
- CS
- Java
- 코딩
- Grafana
- 코딩테스트 준비
- 코딩문제
- cs 공부)준비
- 개발자 취업
- Spring
- 메서드
Archives
- Today
- Total
hayu's 개발 일지
99클럽 코테 스터디 5일차 TIL + Vector VS ArrayList 본문
학습 키워드
- 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
'자료구조&알고리즘' 카테고리의 다른 글
99클럽 코테 스터디 7일차 TIL + Stack 메서드 (0) | 2024.05.27 |
---|---|
99클럽 코테 스터디 6일차 TIL + Stack (0) | 2024.05.26 |
99클럽 코테 스터디 3일차 TIL + Vector (0) | 2024.05.23 |
99클럽 코테 스터디 2일차 TIL + Hash (0) | 2024.05.22 |
99클럽 코테 스터디 1일차 TIL + HashSet (0) | 2024.05.21 |