쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • http
  • SQL
  • MVC
  • querydsl
  • java
  • REST API
  • 깃허브
  • Git
  • 자료구조
  • springboot
  • JPA
  • 스프링
  • 스프링부트
  • 재귀
  • 백준
  • 자바
  • GitHub
  • 함수형인터페이스
  • Spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[자바]/자바 문법

[Java] Vector 와 ArrayList 차이

2021. 10. 24. 06:18
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
    '[자바]/자바 문법' 카테고리의 다른 글
    • [Java] String 클래스의 메서드 replace 와 replaceall 메서드 차이
    • [Java] 배열 복사 Arrays.copyOf() vs System.arraycopy()
    • [Java] return
    • [Java] 메모리 구조 (static, stack, heap)
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바