NATIVE

settings_applicationsObject

NATIVE

Editing
  • account_tree
  • bug_report

ObjectArray

Array 객체는 단일 변수의 이름으로 여러 값들을 컬렉션으로 저장할 수 있는 배열 데이터를 생성하고 관리하는 기능을 가진 내장 객체이다.

설명

Array 객체는 생성자를 가지고 있고 상속 가능한 [[Prototype]] 프로퍼티와 메소드를 가지고 있어 배열 데이터를 생성하고 상속된 프로퍼티와 메소드를 통해 배열을 탐색하고 편집할 수 있도록 해준다.

Array를 한글로 표현하면 배열이므로 Array와 배열은 같은 개념으로 보면 될 것 같다. ECMAScript에서 배열은 타입으로 보면 'object'이다. ECMAScript에서 데이터 타입은 원시(primitive)타입과 참조(reference) 타입으로 나뉜다. 참조(reference) 타입은 객체 데이터를 의미한다. 즉 객체와 객체가 아닌 데이터 타입으로 나눈다고 보면 되겠다.

사실 배열은 객체 타입으로 분류되지만 엄밀히 말하면 'array'이다. typeof []는 그냥 객체라고 알려줄 뿐이다. 이게 말이 되는게 Array 객체 모델은 Object 객체 모델을 상속받아 설계되었다. 따라서 조상의 타입으로 말하는 게 틀린 것은 아니다. 그래서  타입으로써 'array'는 그냥 하위 타입 개념으로 보면 될 것 같다. 사실 이러한 개념은 Function 객체도 마찬가지이다.

ArrayObject를 상속받아 설계되었다 보니 배열의 일종인 연관 배열에서는 확실히 그 정체가 'object'임이 드러난다. 즉 다음과 같은 코드가 존재한다.

const obj = {
	key : "I am object model."
};

console.log(obj['key']);

const arr = [];
arr['key'] = "I am array model.";

console.log(arr.key);

위 코드는 정확히 콘솔에 값을 출력한다. 따라서 두 방식 모두 코드에서 사용되어도 무방하지 않겠나 싶다. 그럼에도 ECMAScript는 효율 측면에서 연관배열 사용보다는 오브젝트의 프로퍼티로 정의하기를 권장한다.

하위 트리 탐색

  • Constructor

    배열 데이터를 생성하는 생성자이며 새로운 배열 생성은 원시타입이 아님에도 리터럴(Lieteral) 방식과 객체의 생성의 기본 방식인 new 연산자를 이용한 방식을 함께 지원한다. 일반적으로 리터럴 방식을 권장한다.

    배열의 일종인 연관배열은 인덱스(index) 대신 키를 사용해서 배열 원소를 생성한다.
    • Array()

      Array 인스턴스(instance) 객체를 생성하는 생성자 함수이며 [[Prototype]] 객체의  constructor로 참조된다.

  • [[Prototype]]

    • Properties

      Array 객체의 상속가능한 프로퍼티를 나타낸다.

      • length

        배열의 길이를 읽거나 설정할 수 있다.

      • @@species

        Array 객체의 생성자를 조회한다.

    • Methods

      Array 객체의 상속가능한 메소드를 나타낸다.

      • @@iterator

        원소를 기반으로 반복적인 처리시 사용할 수 반복자를 반환한다.

      • at()

        지정된 인덱스(index)에 있는 항목을 반환한다. 음수도 허용하며 음의 정수의 경우 배열의 마지막 항목부터 연산한다.

      • concat()

        인수로 지정된 배열과 합친후 새로운 배열로 반환한다.

      • copyWithin()

        배열의 원소 일부를 동일한 배열의 다른 위치에 복사한 다음 크기를 수정하지 않고 반환한다.

      • entries()

        배열의 각 인덱스에 대한 keyvalue 쌍을 가지는 새로운 배열 반복자(Iterator) 객체를 반환한다.

      • every()

        배열의 모든 원소가 제공한 함수로 구현된 테스트를 통과하는지를 확인한다. 각 원소에 대한 결과값이 모두 true일 경우에만 최종적으로 true를 반환한다.

      • fill()

        첫 번째 인수의 정적인 값을 두 번째 인수의 인덱스부터 세 번째 인수의 인덱스까지 원소들을 채워 반환한다.

      • filter()

        인수로 지정된 콜백 함수(callback function) 테스트를 통과하는 모든 원소가 있는 새로운 배열을 반환한다.

      • find()

        인수로 지정된 콜백 함수(callback function)에서 요구하는 원소를 찾기 위해 배열 안의 원소를 순서대로 탐색하면서 최초로 찾은 배열의 원소를 반환한다.

      • findIndex()

        인수로 지정된 콜백 함수(callback function)에서 요구하는 원소를 찾기 위해 배열 안의 원소를 순서대로 탐색하면서 최초로 찾은 배열의 원소에 대한 인덱스 반환한다. 존재하지 않으면 -1을 반환한다.

      • findLast()

        배열의 원소를 역순으로 순회하여 인수로 지정된 콜백 함수(callback function) 테스트를 통과하는 첫 번째 원소를 반환한다.

      • findLastIndex()

        인수로 지정된 콜백 함수(callback function)에서 요구하는 원소를 찾기 위해 배열 안의 원소를 역순으로 탐색하면서 최초로 찾은 배열의 원소에 대한 인덱스 반환한다. 존재하지 않으면 -1을 반환한다.

      • flat()

        중첩된 다차원 배열의 모든 원소를 펼쳐놓은 배열로 반환하며 인수로 지정된 깊이에 따라 펼쳐놓을 배열의 원소를 결정한다.

      • flatMap()

        배열의 각 원소를 콜백 함수(callback function)에 적용한 결과에 한 수준(깊이)씩 평면화하여 생성된 배열을 반환한다.

      • forEach()

        배열 원소에 대응하며 한번씩 지정된 콜백 함수(callback function)를 실행한다.

      • includes()

        배열에 특정 원소가 포함되어 있는지 여부를 확인한다.

      • indexOf()

        인수로 지정된 원소를 가지고 있으면 그 원소에 대한 첫 번째 인덱스를 반환한다.

      • join()

        배열의 모든 원소를 연결해 하나의 문자열로 만들어 반환한다.

      • keys()

        배열의 각 인덱스를 키(Key) 값으로 가지는 새로운 배열의 Iterator 객체를 반환한다.

      • lastIndexOf()

        인수로 지정된 원소가 존재하는 마지막 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.

      • map()

        배열의 모든 원소에 대응하여 인수로 지정된 콜백 함수(callback function)가 실행되고 그 결과를 새로운 배열로 반환한다.

      • pop()

        배열의 마지막 원소를 제거하고 제거된 원소를 반환한다.

      • push()

        배열의 끝에 하나 이상의 원소를 추가하고 변경된 배열의 길이를 반환한다.

      • reduce()

        배열의 왼쪽에서 오른쪽으로 이동하며 각 원소마다 누적 계산값과 함께 함수를 적용해 하나의 값으로 줄인다.

      • reduceRight()

        배열의 오른쪽에서 왼쪽으로 이동하며 각 원소마다 누적 계산값과 함께 콜백 함수(calalback function)를 적용해 하나의 값으로 줄인다. reduce() 메소드의 반대 방향으로 계산하는 것 외에 동일하다.

      • reverse()

        배열의 순서를 역순으로 변형한 뒤 그 배열의 참조를 반환한다.

      • shift()

        배열의 첫 번째 원소를 제거하고 제거된 원소를 반환한다. 실제로 배열의 길이가 변경된다.

      • slice()

        배열의 특정 위치의 원소를 별도로 분리해 새로운 배열로 반환한다. 원본 배열은 수정되지 않는다.

      • some()

        배열 내 원소가 지정된 콜백 함수(callback function)로 테스트 되도록 한다. 각 원소에 대한 결과 값이 한 건 이상이라도 true가 반환된 경우에만 최종 true를 반환한다.

      • sort()

        배열의 원소를 정렬 지정 방식에 따라 새롭게 정렬하여 자신을 반환한다.

      • splice()

        배열의 특정 위치의 원소를 제거하거나 제거후 새 원소를 추가한다.

      • toLocaleString()

        배열의 모든 원소의 값을 문자열로 반환하되 필요하다면 지역(locale)에 맞는 문자열로 반환한다.

      • toReversed()

        reverse() 메소드와 동일하나 역순으로 정렬된 새로운 배열로 반환한다.

      • toSorted()

        배열의 원소를 정렬 지정 방식에 따라 새롭게 정렬한다. sort() 메소드와 동일하나 원본이 아닌 정렬된 복사본을 반환한다.

      • toSpliced()

        배열의 특정 위치의 원소를 제거하거나 제거후 새 원소를 추가한다. splice() 메소드와 동일하나 원본이 아닌 복사본을 반환한다.

      • toString()

        지정된 배열과 원소를 나타내는 문자열을 반환한다.

      • unshift()

        배열에 새로운 원소를 맨 앞에 추가한다.

      • values()

        배열의 각 인덱스에 대한 value를 갖는 새로운 Iterator 객체를 반환한다.

      • with()

        인수로 지정된 인덱스의 원소의 값을 변경하여 새로운 배열로 반환한다.

  • Static

    Array 객체의 정적 메소드와 프로퍼티를 나타낸다.

    • Methods

      • from()

        유사 배열(array-like) 또는 반복 가능(iterable)한 객체를 새로운 배열 인스턴스로 생성하여 Array 객체의 API를 사용할 수 있게 한다.

      • isArray()

        인수로 주어진 데이터가 배열이면 true, 그렇지 않다면 false를 반환한다.

      • of()

        인수(arguments)의 개수와 유형에 관계없이 가변 개수의 인수를 갖는 새로운 Array 인스턴스를 생성해 반환한다.

기술 문서

ECMAScript에서는 배열의 길이와 원소의 데이터 타입이 고정되어 있지 않다. 어떠한 데이터 타입이든 배열의 원소로 가질 수 있고 심지어는 함수도 원소로 사용될 수 있다. 또한 배열의 길이가 고정되어 있지 않아 배열 길이의 재선언 없이 자유롭게 배열의 원소를 추가하거나 삭제할 수 있다. 이러한 이유로 배열의 원소 간 빈 공간이 생기는 등의 밀집도가 높지 않은 특징을 갖게 한다.

버전 명세

ECMAScript 2024(15th Edition)
#sec-array-objects

지원 웹브라우저