[모던 자바스크립트 Deep dive] Study - 27. 배열(1)

n-u·2022년 5월 19일
0
post-thumbnail

27장 배열

27.1 배열이란?

여러 개의 값을 순차적으로 나열한 자료구조

  • 사용 빈도가 매우 높고 가장 기본적인 자료구조이다.
  • 배열은 객체 타입이다.

구성요소

  1. 요소 (Element): 배열이 가지고 있는 값
    • 자바스크립ㅌ의 모드느 값은 배열의 요소가 될 수 있다.
    • 원시값, 객체, 함수, 배열 모두 가능하다.
  2. 인덱스(index): 요소의 위치를 나타내며 0 이상의 정수이다.
    • 배열의 요소에 접근할 떄 사용한다.
    • 0부터 시작한다.
  3. length 프로퍼티 : 배열의 길이를 나타낸다.
    • length 프로퍼티를 갖기 때문에 for 문을 통해 순차적으로 요소에 접근 할 수 있다.

배열 생성

배열 리터럴, Array 생성자 함수, Array.of, Array.from 등을 사용해 생성헌다.

객체와 구별되는 특징

"값의 순서"와 "length 프로퍼티"

장점

  • 처음부터 순차적으로 요소에 접근 할 수 있다.
  • 역순으로도 가능
  • 특정 위치부터 순차적으로 요소에 접근도 가능

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

자료구조 속 배열

동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조

  • 요소는 하나의 데이터 타입으로 통일되어 있고 서로 연속적으로 인접해 있다.
  • 즉, 밀집 배열을 말한다.

특징

  • 각 요소가 동일한 데이터 크기를 갖는다.
  • 빈틈없이 연속적으로 이어져 있다.
  • 인텍스를 통해 단 한번의 연산으로 임의에 요소에 접근 가능하다.(임의 접근)
  • 효율적, 고속으로 동작
  • 정렬되지 않은 배열에서는 특정요소를 검색하는 경우에 배열의 모든 요소를 처음부터 특정 요소를 발견할 때까지 차례로 검색해야한다.
  • 요소를 삽입, 삭제하는 경우 배열의 연속적으로 유지하기 위해 위치를 이동시켜야 하는 단점을 가지고 있다.

자바스크립의 배열

자료구조에서 말하는 일반적인 의미의 배열과 다른 배열을 갖는다.
배열 요소를 위한 메모리 공간이 동일한 공간을 갖지 않고, 연속적으로 이어져 있지 않을 수 있는 희소 배열을 허용하는데 엄밀히 따지면 배열이라고 할 수 없다.

자바스크립트의 배열은 일반적인 배열의 동작을 흉내낸 특수한 객체이다.

특징

  • 인덱스를 나타내는 문자열을 프로퍼티 키로 가진다.
  • length 프로퍼티를 갖는 특수한 객체이다.
  • 배열의 요소는 프로퍼티 값이다.

따라서, 자바스크립트에서 사용할 수 있는 모든 값은 객체 프로퍼티 값이 될 수 있으므로 어떤 타입의 값이라도 배열의 요소가 될 수 있다.

일반적인 배열 vs 자바스크립트이 배열

  1. 일반적 배열의 특징
    • 인텍스로 요소에 빠르게 접근 가능
    • 요소 검색, 삽입, 삭제하는 경우 효율적이지 않다.
  2. 자바스크립트 배열의 특징
    • 해시 테이블로 구현되 객체
    • 인덱스로 요소에 접근할 경우 일반배열보다 성능적으로 느리다.
    • 특정 요소 검색, 삽입, 삭제하는 경우 빠른 성능을 가진다.

자바스크립트의 배열은 요소 접근할때 느린 단점을 보완하기 위해 대부분의 모던 자바스크립트 엔진은 배열을 일반 객체와 구별하여 더 배열처럼 동작하도록 최적화 구현되어 있다.
-> 자바스크립트 배열의 성능이 객체보다는 빠르다.


27.3 length 프로퍼티와 희소 배열

length 프로퍼티

요소의 개수, 배열의 길이를 나타내는 0 이상의 정수의 값

  • 빈 배열 : 0
  • 빈 배열이 아닐 경우 : (가장 큰 인덱스 + 1)

특징

  • 배열 요소를 추가하거나 삭제하면 자동 갱신된다.
  • 임의의 숫자 값을 명시적으로 할당할 수 도 있다.
    • length 프로퍼티 값보다 큰 숫자 값을 할당하는 경우 lenght프로퍼티 값은 변경되나, 실제 배열에는 아무런 변함이 없다.
    • 값 없이 비어 있는 요소를 위해 메모리 공간을 확보하지 않고 빈 요소를 생성하지도 않는다.
      				코트 예제 작성 요망
      			```

희소배열

배열의 요소가 연속적으로 위치하지 않고 일부가 비어 있는 배열

  • 자바스크립트는 희소 배열을 문법적으로 허용한다.

특징

  • length와 배열 요소의 개수가 일치하지 않는다.
  • 희소배열의 length는 희소 배열의 실제 요소 개수보다 언제나 크다

자바스크립트는 문법적으로 희소배열을 허용하나 희소배열을 만들어야 하는 상황을 발생하지 않고, 기존 배열의 개념에 맞지 않으며, 성능도 좋지 않때문에 희소배열을 사용하지 않는 것이 좋다.

27.4 배열 생성

27.5 배열 요소의 참조

27.6 배열 요소의 추가와 갱신

27.7 배열 요소의 삭제

profile
기록하며 발전하는 삶

0개의 댓글