내가 배열이란 것을 듣자마자 드는 생각은 똑같은 것들이 연속된 것 이르는 말이다. 그래서 일반적으로 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조라고 하고 이걸 밀집배열이라고 한다. 이렇게 밀집배열이라고 따로 말하는 건 당연히 다른 경우도 있으니까 그렇다.
내가 지금 배우는 자바 스크립트에서는 배열 안에 문자열이나 숫자 뿐 아니라 객체나 같은 배열도 또 들어갈 수 있다. 그래서 앞에 말한 것과 맞지 않다. 즉, 자바스크립트는 배열의 요소를 위한 메모리 공간이 동일한 크기가 아니어도 되고 연속적으로 이어지지 않을 수도 있다. 이를 희소 배열이라고 한다.
이렇게가 찾아본 내용이고 내가 이해한 것은 개인적인 경험이지만 나만 이해하면 되니까 그거에 빗대어 말하면 전에 아동복 물류창고에서 일한 적이 있었다. 그곳에서 시즌이 끝난 물건들이 다음 시즌에 판매하기 전까지 보관되기 위해서 물류창고로 오는데 이를 사람들이 받아서 정해진 규격의 판 위에 적당한 높이까지 기준에 따라 분류해서 쌓는다. 이 판을 준비할 때 여유롭게 까는 편인데 이게 판마다 정해진 게 없어서 들어오는 물건에 맞춰서 바로 정하고 쌓는다. 그리고 이 때 박스들의 크기나 무게가 브랜드 별로 혹은 물품 별로 다르고 많이 오기도 하고 적게 오기도 하고 문제가 생겨 취소되고 다음 날 오기도 해서 이게 마치 희소 배열 같단 생각이 들었다. 희소 배열은 배열의 요소에 접근이 느리지만 삭제와 삽입이 용이 하다는 점보 비슷했다. 사람이 박스를 받을 때 다 받기 전까진 제대로 물건이 왔나 혹은 상태가 어떤가를 확인하기 어렵지만 대신 한쪽에만 너무 몰리면 다른 곳으로 나눈다던지 잘못 온 것을 돌려보내는 등의 처리가 빠르다.
그리고 이제 사람이 다 받고 이걸 정해진 장소에 지게차로 정리해서 쌓는게 밀집배열 같았다. 물류 창고에 이미 정해진 공간을 최대한 활용해야 하기에 빈 공간 없이 차곡차곡 쌓는다. 당연히 아까 말한 판위에 정해진 높이까지 맞춰서 정리 했기에 규격도 일정하다. 그리고 밀집배열은 희소배열과 반대로 요소에 접근이 빠르지만 삽입이나 삭제가 비효율적이라고 하는데 이것도 창고에서 이미 다 확인이 끝난 물건을 정리하는 것이기에 뭐가 들어왔고 얼마나 있고 하는 부분에 대해 빠르게 알 수 있다라는 점과 대신에 문제가 생겨서 뒤늦게 온 물건을 추가하거나 받는 과정에서 실수해서 잘못 섞인 것을 찾으려면 하나씩 꺼내서 살펴봐야하니 힘든 부분이 있다는 게 이해하고 기억하는데 좋을 것 같았다.
추가로 그럼 자바스크립트에서 배열도 객체가 아닐가 생각이 드는데 맞다. 객체이다. 원시타입을 제외한 나머지 값들은 객체라고 처음에 배웠다. 그런데 왜 [배열]이나 {객체}를 구분해놨냐하면 모던 자바스크립트 엔진은 앞에 말한 단점을 보완하기 위해 배열을 다로 구분해 놨다고 한다.
8가지 자료구조 중에 이제 하나 끝났다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
| 23.06.21 자료구조 3. 스택(Stack) (0) | 2023.06.21 |
|---|---|
| 23. 06.20 자료구조 2. 연결 리스트(Linked List) (0) | 2023.06.20 |
| 23. 06.19 이터러블과 이터레이터 (0) | 2023.06.19 |
| 23. 06. 18 ES는 뭘까 (0) | 2023.06.18 |
| 23.06.17 인스턴스가 뭘까 (0) | 2023.06.17 |