Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

27장 배열 정리 #31

Open
sbyeol3 opened this issue Mar 26, 2022 · 0 comments
Open

27장 배열 정리 #31

sbyeol3 opened this issue Mar 26, 2022 · 0 comments

Comments

@sbyeol3
Copy link
Collaborator

sbyeol3 commented Mar 26, 2022

27.1 배열이란?

  • 자바스크립트에 배열이라는 타입은 존재하지 않는다. 배열은 객체 타입이다.
  • 배열은 객체지만 일반 객체와는 구분되는 독특한 특징이 있다. ▶️ 값의 순서 length
    • 배열이 인덱스를 갖기 때문에 순차적으로 요소에 접근 가능

27.2 자바스크립트 배열은 배열이 아니다

  • 배열의 요소를 위한 각각의 메모리 공간은 동일한 크기를 갖지 않아도 되며, 연속적으로 이어져 있지 않을 수도 있다 → 희소 배열(sparse array) (↔ 밀집 배열)
  • 자바스크립트의 배열은 일반적인 배열의 동작을 흉내 낸 특수한 객체다.
  • 해시테이블로 구현된 객체이므로 인덱스로의 접근이 일반 배열보다 느릴 수 밖에 없는 구조적인 단점이 있으나 특정 요소의 검색, 삽입, 삭제하는 경우 더 빠른 성능을 기대할 수 있다.
  • 대부분 모던 자바스크립트 엔진은 배열을 좀 더 배열처럼 동작하도록 최적화하여 구현

27.3 length 프로퍼티와 희소 배열

  • 배열에 요소를 추가하거나 삭제하면 length 프로퍼티 값은 자동 갱신된다.
  • 현재 값보다 작은 값을 할당하면 배열의 길이가 줄어든다.
  • 큰 값을 할당하면 length는 변경되지만 실제 배열의 길이가 늘어나지는 않는다.
  • 희소 배열은 length와 배열 요소의 개수가 일치하지 않는다. length >= 실제 개수
  • 문법적으로는 희소 배열을 허용하지만 최적화가 된 엔진은 일반적인 배열처럼 연속된 메모리 공간을 확보하는 경우도 있으므로 사용하지 않는 것이 좋다.

27.4 배열 생성

  • 유사 배열 객체(array-like object): 배열처럼 인덱스로 프로퍼티 값에 접근 가능하며 length 프로퍼티를 갖느 객체
  • 이터러블 객체(iterable object): Symbol.iterator 메서드를 구현하여 for...of 문으로 순회할 수 있으며 스프레드 문법과 배열 디스트럭처링 할당의 대상으로 사용할 수 있는 객체
    • Array, String, Map, Set, DOM collection, arguments 등

27.6 배열 요소의 추가와 갱신

  • 정수 이외의 값을 인덱스처럼 사용하면 요소가 생성되는 것이 아니라 프로퍼티가 생성되며 이는 length 프로퍼티 값에 영향을 주지 않는다.

27.7 배열 요소의 삭제

  • delete 연산자를 사용하면 length 프로퍼티 값이 변하지 않는다.
  • Array.prototype.splice 를 사용해야 희소 배열을 만들지 않으면서 삭제가 가능하다.

27.8 배열 메서드

  • 배열에는 원본 배열을 직접 변경하는 mutator method, 원본 배열을 직접 변경하지 않고 새로운 배열을 생성하여 반환하는 accessor method가 있다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants