스프레스 문법(...
)
스프레드 문법(spread syntax, 전개 구문)은
점 세 개 (...
)를 사용하여 여러 값이 뭉쳐 있는 배열, 객체 또는 함수 인수 목록과 같은
여러 값들의 집합을 펼쳐서(spread)
, 즉 전개해서
개별적인 항목으로 만드는 기능을 제공합니다.
스프레스 문법을 사용할 수 있는 대상
Array
String
Map
Set
Function
의arguments
- DOM 컬렉션 객체(
NodeList
,HTMLCollection
)
위 1~6 리스트처럼 for...of
문으로 순회 가능한 이터러블(iterable) 객체가 대상이 됩니다.
그리고,
- 순회 가능하지 않은 객체 리터럴에서는 스프레드 문법은 객체의 속성을 열거하고 키-값 쌍을 생성 중인 객체에 추가합니다.
스프레드 문법의 구문
기본 구문 예제
기본 구문 예제: HTMLCollection
기본 구문 예제: 순회 가능(iterable)하지 않은 객체
위의 예제처럼 순회 가능(iterable)하지 않은 객체 전체를 스프레드 문법으로 전개하는 것은 지원되지 않습니다.
하지만, 아래의 예제처럼 순회 가능(iterable)하지 않은 객체라도 두 객체의 속성을 하나의 새로운 객체로 병합하는 것은 문제가 없습니다. JavaScript 엔진이 내부적으로 각 객체의 속성을 순회하면서 새로운 객체를 생성하게 됩니다. 이 과정에서 각 객체의 속성을 가져와 새로운 객체에 할당합니다.
순회 가능하지 않은 객체 리터럴에서 스프레드 문법은 객체의 속성을 열거하고 키-값 쌍을 생성 중인 객체에 추가합니다.
이러한 과정은 스프레드 문법을 사용하여 객체를 병합할 때 발생하며, 객체의 순회 가능 여부와 상관없이 동작합니다.
기본 구문 예제: 변수에 할당
'스프레스 문법'은 피연산자를 연산하는 연산자(operator)가 아닙니다.
스프레드 문법을 흔히 '스프레드 연산자'라고도 부르는데, 이는 엄밀히 말해서 잘못된 표현입니다. 연산자는 피연산자를 연산하여 값으로 표현할 수 있어야 합니다. 따라서, 스프레스 문법을 스프레드 연산자라 말할 수 없고 맥락에서 사용 가능한 문법입니다.
변수는 단순 문법을 할당할 수 없습니다. 아래의 예제는 단순 문법이 왜 변수에 할당되면 에러를 발생하는지 쉽게 알 수 있게 해줍니다.
변수는 메모리에서 처리할 수 있는 데이터(값, 객체, 함수 등)만을 할당할 수 있습니다.
스프레드 문법의 활용
배열 확장
스프레드 문법을 사용하여 배열을 확장할 수 있습니다. 이를 통해 기존 배열의 요소를 새 배열에 복사하고, 새 요소를 추가하거나 다른 배열을 병합할 수 있습니다.
객체 확장
스프레드 문법을 사용하여 객체를 확장할 수 있습니다. 이를 통해 기존 객체의 속성을 새 객체에 복사하고, 새 속성을 추가하거나 기존 속성을 덮어쓸 수 있습니다.
함수 호출 시 인수 전달
스프레드 문법을 사용하여 함수를 호출할 때 배열 또는 인수 목록을 전달할 수 있습니다. 이를 통해 함수가 가변 인수를 허용하는 경우에도 배열로부터 개별 인수로 전달할 수 있습니다.
HTMLCollection
으로 DOM 객체 다루기
스프레드 문법을 사용하면 초보자가 HTMLCollection
과 같은 DOM 객체를 더 쉽게 다룰 수 있습니다. HTMLCollection
은 DOM 요소들의 컬렉션으로, 배열과 유사한 구조를 가지고 있지만 배열 메서드를 직접 사용할 수 없는 등 몇 가지 특별한 동작이 있기 때문에 초보자에게는 조금 어려울 수 있습니다.
스프레드 문법을 사용하면 HTMLCollection
을 배열로 변환하거나 다른 배열과 병합하는 것이 간단해집니다. 예를 들어, 아래의 코드는 HTMLCollection
을 배열로 변환하여 스프레드 문법을 사용하여 다른 배열과 병합하는 방법을 보여줍니다.
브라우저 호환성
속성 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
스프레드 문법 | 46 | 12 | 16 | 8 |