Programming/Java

[Java SSAP 기초] Array vs ArrayList

주죵 2021. 2. 2. 23:38
728x90
반응형

오늘 근무중 들었던 돌발질문

"String [] 이거랑 ArrayList<String> 의 차이가 뭔지 알아?"

본인 : .... 공부하겠습니다..

 

ㅋㅋ 그렇다. 나는 이것도 모르고 자바개발자가 됐다.ㅋㅋ

일단 List와 ArrayList는 사실상 거의 비슷하다. 자바에서 List가 인터페이스고 ArrayList는 List가 implements 된 클래스다.

ㅅ앞서 다뤘던 다형성을 위한 구성이라 생각하면 된다.

Array vs List (>=ArrayList)

우선 Array와 List의 공통점 차이점을 먼저 알아보자

공통점

  • 아이템에 순서가 존재하는 컬렉션이다.

그렇다. 결국엔 둘다 많은 데이터를 보다 효율적으로 관리, 처리하기 위한 도구라고 할 수 있다.

 

그렇다면 차이점은 무엇일까?

 

Array List
index의 값과, 쌍으로 구성.  순서가 있는 엘리먼트의 모임
index는 값에 대한 유일무이한 식별자 index라는 장점 대신 빈틈없는 데이터의 적재
논리적 저장순서와 물리적 저장순서가 일치함
> index를 통해 엘리먼트로 접근
index는 몇번째 데이터인가(순서)의 의미
> 포인터를 통한 접근
빈 엘리먼트 허용 빈 엘리먼트 허용하지 않음
연속된 메모리 공간 불연속적인 메모리 공간 차지
정의와 동시에 길이 지정 및 길이 변경 불가 동적이므로 크기 정해져있지 않음

초보 개발자의 빛 생활코딩좌님과 여럿 블로거님의 정보를 빌려 만든 허접한 표이다.

 

 

장단점 살펴보기

위의 차이점을 보면 각 자료구조에 대한 장단점이 어느정도 예상이 된다.

Array의 경우

장점

  • 인덱스가 유일무이한 식별자 > 검색이 아주 쉬울것이다 (인덱스만 알고있다면야)
  • 연속된 메모리 공간 > 관리도 편할것

단점

  • 정의 후 길이 지정 및 길이 변경 불가 > 엘리먼트 삭제시 빈공간, 새로운 데이터 추가 불편(크기변동이 안되서)
  • 정의 후 길이 지정 및 길이 변경 불가 > 내앞날도 모르는데 크기를 미리 지정해주는 SSAP 불편함
  • 연속된 메모리 공간 > 데이터 삭제되어도 계속 빈 공간 유지하여 낭비

아무래도 동적이지 못하다는건 큰 단점이다. 데이터 삭제시 빈공간을 가지고있다는 점은 나중에 오류도 많이 발생시킬것같은 느낌적인 느낌. Null 사랑하지 않아..

 

List는 어떨까

  • 동적이므로 크기 정해져있지 않음 > 삽입, 삭제 용이할듯 하다 (완전 그렇지는 않다!)
  • 빈 엘리먼트 허용 X , 빈틈없는 데이터 적재 > 삭제후에 메모리 관리 측면에선 Array보단 좋을것같다

단점

  • 포인터(메모리 주소값 가르킴)를 통한 접근 > 인덱스를 통한 빠른접근보단 느릴수 있다.
  • 길이가 동적이라해서데이터를 집어넣어야 하는 상황에서 무조건 효율적이진 않다. 중간에 데이터를 삽입하여야 하는 경우 전부다 하나씩 밀려나는 비효율도 존재.  
    (물론 LinkedList를 통해 극복가능! 대신 물론 메모리는 쫌 더먹을수 있고 그에 따른 단점도 존재할테지만)

결론

그렇다. 둘은 비슷하지만 극명한 차이가 존재한다.

Array : 길이변경 불가(추가, 삭제 불편) but 빠른 접근 및 검색

> 크기 정해져 있고, 추가나 삭제가 적으면서 검색은 자주쓰는 경우

List : 길이변경 가능 but 검색은 느림

> 크기 정해져 있지 않아 추가나 삭제가 많지만 검색은 적은 경우

 

따라서 결론은 경우에 따라 적절한 자료구조를 활용하면 된다.

 

요즘 많이 본 유투버 빠니보틀 형님처럼 3줄요약을 하고 끝내보자

1) Array는 정적인데 날램

2) List는 동적인데 굼뜸

3) 그러니 때에맞게 적절히 쓰자

 

 

출처

velog.io/@adam2/

velog.io/@choonghee-lee

생활코딩

728x90