Javascript/core
Spread operator: unshift보단 전개연산자를 쓰자!
student513
2021. 4. 5. 12:40
배열에 원소를 추가할 때 unshift를 쓰곤 한다.
arr = [2, 3, 4]
arr.unshift(1)
arr.unshift(0)
console.log(arr) // [0, 1, 2, 3, 4]
그러나 unshift는 다음과 같이 배열의 값을 직접 참조하여 원본 배열에 변형을 일으키는데,
불변성의 이슈에서나 성능 상의 이유에서나 좋지 못하다.
arr = [2, 3, 4]
// 0: 2, 1: 3, 2: 4
arr.unshift(1)
// 0: 1, 1: 2, 2: 3, 3: 4
arr.unshift(0)
// 0: 0, 1: 1, 2: 2, 3: 3, 4: 4
보시다시피 배열의 원소와 인덱스의 연결이 전부 끊어지고 새로운 값이 할당된다.
중간에 새로운 원소가 끼어들거나, 최악의 경우 첫 번째에 새로운 원소가 끼어들 경우 나머지 원소들에 대한 연산도 모두 해줘야하므로
성능에서 문제가 발생할 수 밖에 없다.
그러나 전개연산자를 이용하면 불변성, 성능 이슈를 모두 잡을 수 있다.
arr = [2, 3, 4]
new_arr = [0, 1, ...arr]
console.log(new_arr) // [0, 1, 2, 3, 4]
전개연산자는 얕은 복사를 이용하기 때문에
다음과 같이 arr의 메모리를 참조하여 원본배열의 변형없이,
그리고 unshift과 같이 불필요한 연산없이 한 번의 선언으로 원하는 배열을 생성할 수 있다.