Skip to content

Latest commit

 

History

History
202 lines (130 loc) · 5.29 KB

File metadata and controls

202 lines (130 loc) · 5.29 KB

13. Indexed collections

  • 인덱스 값으로 접근할 수 있는 순서 있는 데이터들의 컬렉션이다.
    • 배열(Array)
    • 배열-같은 구조(TypedArray)

13.1 Array 객체

  • **객체(array)**는 이름(name)과 인덱스로 참조할 수 있는 값들의 순서 있는 리스트다.
  • 자바스크립트는 명시적인 배열 데이터 타입을 가지지 않지만, 미리 정의된 Array 객체를 사용할 수 있다.

13.1.1 배열 만들기

  • 배열을 요소들로 초기화하는 방법은 다음과 같다.
    • Array 생성자 함수
    • Array 함수
    • 배열 리터럴 혹은 배열 이니셜라이저(array initializer)
    • Array.of() static 메서드(ES2015)
/* Array 생성자 함수 */
let arr = new Array(요쇼1, 요소2, ...);
/* Array 함수 */
let arr = Array(요쇼1, 요소2, ...);
/* 배열 이니셜라이저 */
let arr = [요쇼1, 요소2, ...];
/* Array.of 메서드 */
let arr = Array.of(요소1, 요소2, ...);
  • 요소를 가지진 않지만 길이가 0이 아닌 배열을 만드는 방법은 다음과 같다.
    • 길이는 반드시 Number 여야 한다.
/* Array 생성자 함수 */
let arr = new Array(길이);
/* Array 함수 */
let arr = Array(길이);
/* 배열 이니셜라이저 */
let arr = [];
arr.length = 길이;
  • 요소를 하나 가진 배열로 초기화하고 싶다면 배열 리터럴을 사용해야한다.
    • 그렇지 않다면 길이로 전달될 것이다.
// 길이가 3인 배열 생성
let a = new Array(3);
// 요소가 3인 배열 생성
let a = [3];

13.1.2 배열 요소와 배열 프로퍼티에 접근하기

  • []로 인덱스의 요소에 접근한다.
 배열[인덱스];
  • [].로 배열의 프로퍼티에 접근할 수도 있다.
let arr = new Array(3);
arr['length'];		// 3
arr.length;		// 3

13.1.3 배열 요소와 배열 프로퍼티 추가하기

  • 원하는 인덱스에 값을 할당하여 요소를 추가할 수 있다.
    • 이때 인덱스는 integer이다.
let arr = []
arr[0] = 'element';
  • 값을 할당하여 프로퍼티를 추가할 수 있다.
    • 이때 인덱스는 non-integer이다.
let arr = []
arr[2.3] = 'property'
arr.length;		// 0
arr.hasOwnProperty(2.3);		// true

13.1.4 배열의 길이

  • 구현 단계에서 자바스크립트의 배열은 요소를 스탠다드 객체 프로퍼티로 저장하며, 배열 인덱스는 프로퍼티의 이름이 된다.
  • 인덱스는 0부터 시작하므로 배열의 길이는 배열의 마지막 인덱스에 1를 더한 것과 같다.
let arr = []
arr[30] = 'cat';
arr.length;		// 11
  • length 프로퍼티에 값을 할당할 수 있다.
let arr = [1, 2, 3];
arr.length = 2;		// arr has [1, 2]
arr.length = 0;		// arr has []
arr.length = 3;		// arr has [ <3 empty items> ]

13.1.5 배열 요소 반복하기

  • 배열의 요소는 다음과 같은 방법으로 반복할 수 있다.
    • for
    • forEach 메서드
let arr = [1, 2, 3];

for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

arr.forEach(num => console.log(num););

13.1.6 다차원 배열

  • 배열은 요소로 배열을 가질 수 있어, 다차원 배열을 만들 수 있다.
let arr = []

for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
        arr[i][j] = i * j;
    }
}

13.1.7 배열과 비슷한 객체 다루기

  • Function.prototype.call() 메서드를 사용한다.
  • 가령 arguments 객체는 length 프로퍼티는 가지나 forEach 메서드는 가지지 않는다. 배열로 변환해서 사용하도록 한다.
Array.prototype.forEach.call(arguments, (item) => console.log(item));
  • 문자열도 마찬가지이다.
Array.prototype.forEach.call('a string', (chr) => console.log(chr));

13.2 Typed Arrays

  • 자바스크립트의 typed array는 배열과 비슷한 객체로, raw binary data에 접근할 수 있는 메커니즘을 제공한다.
  • Array 객체는 동적으로 수정할 수 있어, 어떤 자바스크립트 값이든 가질 수 있다.
  • 웹 앱이 발전함에 따라, raw binary data를 조금 더 빠르고 쉽게 조작하기 위해 typed array를 사용한다.

13.2.1 버퍼와 뷰: typed array 아키텍처

  • 유연성과 효율성을 극대화하기 위해, typed array는 구현을 **버퍼(buffer)**와 **뷰(view)**로 나눈다.
  • ArrayBuffer 객체로 구현된 버퍼는 데이터의 chunk를 나타내는 객체이다.
    • 이렇다 할 만한 포맷(format)이 없다.
    • 내용에 접근할 수 있는 메커니즘을 제공하지 않는다.
  • 뷰는 버퍼에 담긴 메모리에 접근할 수 있게 한다.
    • 뷰는 context라는, offset으로 시작하는 데이터 타입과 몇 개의 요소를 제공하여 데이터를 실제 typed array로 변환한다.

13.2.2 ArrayBuffer

  • ArrayBuffer는 제네릭한, 고정된 길이의 bianry data buffer를 표현하기 위해 사용하는 데이터 타입이다.
  • typed array view 혹은 buffer를 특정 포맷으로 나타내는 DataView를 만들어 buffer의 내용을 읽고 쓰는 데 사용한다.

13.2.3 Typed array views

  • typed arary view는 self descriptive name을 가지며 모든 보통의 numeric type(int8, Uint32 등)을 위한 view를 제공한다.