Javascript ES6 Extended Parameter Handling
1. 기본 파라미터 초기값(Default Parameter value)
- 파라미터에 초기값을 설정하여 함수 내에서 수행하던 파라미터 체크 및 초기화를 간편화 할 수 있다.
1 | // ES5 |
2. Rest 파라미터(Rest Parameter)
2.1 Syntax
- Rest 파라미터를 사용하면 인수를 함수 내부에서
배열로 전달받을 수 있다.
- Rest 파라미터가 생성된 이유는 argument가 유사배열이다 보니 call, reply를 호출해야하는 불편함을 해소하기 위해서 생성되었다.
1 | function foo( ...rest) { |
- rest parameter는 가장 후미에 등장하거나 홀로 사용해야한다.
1 | function foo(param, ...rest) { |
2.2 arguments와 rest 파라미터
ES6 이전에는 인자의 갯수를 사전에 알 수 없는 가변 인자 함수의 경우, arguments 객체를 통해 인자값을 확인한다.
arguments 객체는 함수 호출 시 전달된 인수(argument)들의 정보를 담고 있는 순회가능한(iterable) 유사 배열 객체(array-like object)이다.
함수 객체의 arguments 프로퍼티는 arguments 객체를 값으로 가지며 함수 내부에서 지역변수처럼 사용된다.
1 | // ES5 |
1 | // ES5 |
- ES6에서는 rest 파라미터를 사용하여 가변인자를 함수 내부에 배열로 전달할 수 있다. 유사 배열인 arguments 객체를 배열로 변환하는 등의 번거로움을 피할 수 있다.
1 | // ES6 |
- Arrow function에는 arguments 프로퍼티가 없다. Arrow function에서 가변 인자 함수를 구현하는 경우, rest 파라미터를 사용하여야 한다.
1 | // ES6 |
3. Spread 연산자 (Spread Operator)
1 | // ...[1, 2, 3]는 [1, 2, 3]을 개별 요소로 분리한다(-> 1, 2, 3) |
3.1 함수의 인수로 사용하는 경우
- 배열을 함수의 인수로 사용하고, 배열의 각 요소를 개별적인 파라미터로 전달하고 싶은 경우, Function.prototype.apply를 사용하는 것이 일반적이다.
1 | // ES5 |
- ES6의 Spread 연산자(…)를 사용한 배열을 함수의 인수로 사용하면 배열의 요소를 개별적으로 분리하여 순차적으로 파라미터에 할당한다.
1 | // ES6 |
- 앞에서 살펴본 Rest 파라미터는 Spread 연산자를 사용하여 파라미터를 작성한 것을 의미한다. 형태가 동일하여 혼동할 수 있으므로 주의가 필요하다.
1 | // Spread 연산자를 사용한 매개변수 정의 (= Rest 파라미터) |
- Rest 파라미터는 반드시 마지막 파라미터이어야 하지만 Spread 연산자를 사용한 인수는 자유롭게 사용할 수 있다.
1 | // ES6 |
3.2 배열에서 사용하는 경우
- Spread 연산자를 배열에서 사용하는 경우, 보다 간결하고 가독성이 향상된 표현이 가능하다.
3.2.1 concat
- 기존 배열의 요소를 새로운 배열 요소의 일부로 만들고 싶은 경우, 배열 리터럴 구문만으로 해결할 수 없고
concat 메소드
를 사용하여야 한다.
1 | // ES5 |
- Spread 연산자를 배열에서 사용하는 경우, 배열 리터럴 구문만으로 기존 배열의 요소를 새로운 배열 요소의 일부로 만들 수 있다.
1 | // ES6 |
3.2.2 push
- ES5에서 기존 배열에 다른 배열을 push하기 위해서는 아래와 같은 방법을 사용한다.
1 | // ES5 |
- Spread 연산자를 사용하면 아래와 같이 보다 간편하게 표현할 수 있다.
call은 1번째 인자를 ,로 받고 apply는 2번째 인자를 배열로 받는다.
1 | // ES6 |
3.2.3 splice
- ES5에서 기존 배열에 다른 배열을 삽입하기 위해서는 아래와 같은 방법을 사용한다.
1 | // ES5 |
- Spread 연산자를 사용하면 아래와 같이 보다 간편하게 표현할 수 있다.
1 | // ES6 |
3.2.4 copy
- ES5에서 기존 배열을 복사하기 위해서는 아래와 같은 방법을 사용한다
1 | // ES5 |
- Spread 연산자를 사용하면 아래와 같이 보다 간편하게 표현할 수 있다.
1 | // ES6 |