오늘 근무중 들었던 돌발질문
"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) 그러니 때에맞게 적절히 쓰자
출처
생활코딩
'Programming > Java' 카테고리의 다른 글
[Java 기초] 형변환과 오버라이딩 메서드 / 다형성 (0) | 2021.04.28 |
---|---|
[Java기초] 상속에서 클래스 생성 과정과 형변환 (0) | 2021.04.25 |
18. JAVA 네트워크 (0) | 2021.01.17 |
17. JAVA 그래픽 (0) | 2021.01.17 |
16. 스레드(Thread) (0) | 2021.01.16 |