1. 메모리 관점에서의 배열
- 메모리의 종류
- volatile(휘발성) : RAM(Random Access Memory)과 같은 것
- non-volatile(비휘발성) : 하드 드라이브와 같은 것
- 프로그램이 돌아가고 변수를 생성할 때 모두 RAM에 저장
- RAM에서 데이터를 읽는 것이 하드 드라이브에서 읽는 것보다 빠름 -> 데이터 접속을 랜덤으로 할 수 있어 각 메모리 박스의 주소에 빠르게 접근 가능
- 메모리 관점에서 Array를 생성할 때, 미리 공간의 길이를 선언하고 할당해야 함
- JS와 Python은 할당하지 않아도 대신 핸들링해줌 => 프로그램이 느려질 수 있음
2. Array의 Reading
- 0부터 indexing

- 위치로 요소에 접근
- 배열에서 읽어내는 것음 엄청 빠름 => 컴퓨터는 배열이 어디서 시작하는지 알고 있기 때문!
- 많은 자료를 읽어야 한다면 배열이 최고
- 배열의 길이는 상관 없음 => index에서 요소를 읽어내는 속도는 동일하기 때문
3. Array의 Searching
- 데이터를 읽을 때는 그냥 값을 얻으면 되지만, 검색을 할 때는 해당 값이 배열에 있는지 없는지, 어디에 있는지 모름 => reading보다 시간이 더 소요
- 배열에서 해당 값을 찾으려면 배열의 item을 하나하나 열어보고 맞는지 체크하는 과정이 필요(Linear Search)
4. Array의 Insert(Add)
- best case : 배열의 공간이 남아있는 상태에서 push하는 경우
- worst case 1 : 배열의 맨 앞에 item 추가하는 경우 => 배열의 모든 item을 움직여야하기 때문
- worst case 2 : 배열의 공간이 없는데 값을 추가해야 하는 경우 => 더 큰 배열을 만들어서 이전 배열을 복사하고, 새로운 item을 추가해야됨(
오랜 시간 소요)
5. Array의 Delete
- best case : 배열의 마지막 요소를 삭제하는 pop의 경우 =>
컴퓨터는 배열이 어디서 시작하고 얼마나 긴지 기억하고 있기 때문!
- worst case : 배열의 첫 번째 요소 삭제하는 경우
6. 정리
- 배열은 데이터를 읽을 때는 정말 빠름!(랜덤으로 접속 가능하기 때문)
- 데이터 검색, 추가, 삭제할 때는 느려짐!
- 배열에서 추가하고 삭제하고 싶은 상황에는 배열의 맨 끝에서 작업하는 것이 가장 좋음
출처 : Array 배열 기초 개념 by 노마드코더
https://www.youtube.com/watch?v=NFETSCJON2M&list=PL7jH19IHhOLMdHvl3KBfFI70r9P0lkJwL&index=2