배열
자바스크립트에서는 배열이 정말로 중요합니다. 그 이유는 바로 많이 쓰기 때문입니다.(?) 서버에서 만약 자료를 조작할 일이 생긴다면, 배열 안에 객체 리터럴들로 원하는 자료를 삽입하고 이를 배열의 메서드를 통해서 조작합니다. 자바스크립트를 잘 쓰는 사람은 '배열을 잘 쓰는 사람이다' 라는 말을 교수님께 들어본적이 있습니다. 자바스크립트를 잘 쓰기 위해 배열에 대해서 한 번 정리해보도록 하겠습니다.
배열의 특징
객체는 프로퍼티 키의 의미가 있습니다. 즉 순서에 의미가 없다고 볼 수 있습니다. 하지만 배열은 순서에 의미가 있습니다. 객체는 키를 통해서 자료를 가져오는 반면에 배열은 인덱스를 통해 자료를 찾습니다. 이는 순서를 통해서 자료를 찾는다고도 볼 수 있습니다.
arr = [1, 2, 3];
o = {name: 'wonjae'};
console.log(arr[0]);
console.log(o.name);
일반적으로 배열은 내부 요소들의 타입이 일치해야 배열이라고 부릅니다. 또한 정확히 똑같은 사이즈로 지정한 공간을 사용해야 합니다. 이를 통해 선두 어드레스에 (선두 어드레스) + 1 * (정해놓은 공간의 크기) 를 통해 Random Access 를 하게 됩니다.
사실 자바스크립트에서의 배열은.....
사실 자바스크립트의 배열은 배열이 아닙니다. 배열의 존재는 사실 인덱스를 키로 가지는 객체입니다. 아래 예제처럼 arr 이라는 배열을 만들고 getOwnPropertyDescripter 를 사용해 출력해보면 유사 배열 구조와 같은 자료구조가 나오게 됩니다. 이 말은 즉, 배열이라고 믿고 있는 자료구조도 사실 객체의 프로토타입을 상속 받는 객체라는 것을 알 수 있습니다.
배열의 메모리
만약 배열을 만든다면 메모리에 선두 어드레스를 지정합니다. 이후 몇 바이트를 사용할지 결정합니다. 따라서 배열은 공간에 연속적으로 저장되게 됩니다. 이를 밀집 배열이라고 부릅니다. 배열에 값을 추가하려면 사실 새로운 메모리에 값을 할당하고 이를 복사해서 정해놓은 메모리에 참조값을 전달하게 됩니다.
arr.length 의 경우 참조도 가능하지만 할동도 가능합니다. 사실 이는 안티 패턴이므로 사용하지 않는것이 좋습니다. 만약 length 의 숫자를 줄인다면, 원래 있던 배열의 사이즈를 줄이게 됩니다. 이는 원래 존재하던 배열을 사라지게 할 수 있습니다.
반대로 arr.length 를 늘리게 되면 늘린 만큼 empty 가 배열 내부에 생기게 됩니다. 사실 empty 배열 내부를 차지 하는것이 아닌, 없는 자리를 만드는 것으로 이 경우에는 희소 배열을 만들게 됩니다.
희소 배열은 length 값이 실제 요소들의 크기보다 크면 희소배열이라고 합니다.희소 배열은 만들지 않는 것이 좋습니다. 가장 좋은 것은 배열의 요소들의 타입을 일치하게 만들고 밀집시켜서 만드는 게 가장 좋습니다.
다음 게시글에서 배열의 메서드들을 한 번 같이 살펴보도록 하겠습니다.
마무리
자바스크립트에서 배열은 정말 많이 사용됩니다. 이를 위해서는 내부 원리를 잘 알아놓는것이 좋습니다. 충격적이게도 자바스크립트의 배열은 배열이 아니라 객체였다는 사실도 알 수 있었습니다.
보다 더 자세한 내용은 아래 링크에서 확인 가능하고, 저 또한 내용들을 공부하며 정리하기 위한 목적으로 글을 남기는 것을 알려드립니다. 읽어주셔서 감사합니다!
'자바스크립트 > 자바스크립트 정리' 카테고리의 다른 글
[자바스크립트] Symbol (0) | 2021.06.06 |
---|---|
[자바스크립트] 배열의 메서드들 (0) | 2021.06.02 |
[자바스크립트] 정렬 구현해보기 (0) | 2021.06.01 |
[자바스크립트] ES6 의 함수 (0) | 2021.05.30 |
[자바스크립트] 클로저 (0) | 2021.05.30 |