학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 36 · 실전 면접 답변

Rest와 Spread는 같은 점 세 개 문법을 어떻게 다르게 쓰나요?

이렇게 답해 보세요 (핵심 답변)

Rest와 Spread는 둘 다 점 세 개(...) 문법을 사용하지만 동작 방향이 정반대입니다. Rest(나머지)는 함수의 매개변수 목록이나 구조 분해 할당의 왼쪽에서 아직 선택되지 않은 나머지 값들을 하나의 배열이나 객체로 모아 주는 문법입니다. 반대로 Spread(전개)는 함수 호출 인자나 배열·객체 리터럴 안쪽에서 기존 배열이나 객체의 항목들을 낱개로 펼쳐 넣는 문법입니다. 이때 배열과 함수 호출의 Spread는 이터러블(iterable) 프로토콜을 따르고, 객체 리터럴 내부의 Spread는 객체 자신의 열거 가능한 고유 프로퍼티를 얕게 복사합니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 함수 정의에서 function sum(...nums)는 여러 인자를 배열로 모으는 Rest이고, 호출에서 sum(...arr)는 배열을 개별 인자로 펼치는 Spread입니다.
  2. Rest 매개변수나 구조 분해의 Rest 항목은 항상 남은 요소를 모아야 하므로 마지막 위치에만 올 수 있습니다.

면접에서 자주 하는 실수

객체 리터럴 안에서 {...obj}로 객체 Spread는 가능하지만, 일반 객체는 이터러블이 아니므로 [...obj]처럼 배열에 바로 펼치면 TypeError가 발생합니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 36번을 바탕으로 질문과 답변을 새로 정리했습니다.

← JavaScript