Logo

자바스크립트 배열 합치기: concat() 메서드, spread 연산자

이번 포스팅에서는 자바스크립트에서 배열을 합치는 방법에 대해서 간단히 정리해보겠습니다.

concat() 메서드

연결하다(concatenate)를 의미하는 배열의 concat() 메서드를 사용하면 하나의 배열에 다른 배열을 합칠 수 있습니다.

예를 들어, concat() 메서드로 숫자 배열에 글자 배열을 합쳐보겠습니다.

const numbers = [1, 2, 3];
const letters = ["A", "B"];
const concatenated = numbers.concat(letters);
console.log(concatenated); // [1, 2, 3, 'A', 'B']

concat() 메서드의 중요한 특징은 바로 원본 배열을 건드리지 않고 새로운 배열을 반환한다는 것입니다.

console.log(numbers); // [1, 2, 3]
console.log(letters); // ['A', 'B']

따라서 원본 배열을 건드리지 않는 배열의 다른 메서드와 함께 체인(chain)의 형태로 연쇄 호출이 가능합니다.

[1, 2, 3]
  .concat(["A", "B"])
  .map((item) => item + item)
  .reduce((acc, val) => acc + val, ""); // '246AABB'

concat() 메서드는 가변 인자를 받기 때문에 여러 개의 배열을 한 번에 합칠 수도 있습니다.

[1, 2, 3].concat(["A", "B"], true, [false]);
// [1, 2, 3, 'A', 'B', true, false]

위 예제에서 true 인수를 보시면 아시겠지만 반드시 배열을 넘겨야하는 것도 아닙니다. 이렇게 일반 값을 넘기면 그 값을 합쳐진 배열에 추가해줍니다.

spread 연산자

ES6부터는 배열을 합칠 때 spread 또는 전개 연산자라고 불리는 ... 기호가 많이 사용되는데요. 배열을 나타내는 [] 기호 안에서 어떤 원소 앞에 ... 기호를 붙이면 그 배열 내의 원소가 마치 펼쳐진 것처럼 해당 배열에 추가됩니다.

const numbers = [1, 2, 3];
const letters = ["A", "B"];
const spread = [...numbers, ...letters];
console.log(spread); // [1, 2, 3, 'A', 'B']

이 문법을 활용하면 매우 유연하게 일반 값과 배열을 합쳐줄 수 있습니다.

[...[1, 2], 3, ...["A", "B"], true, ...[false]];
// [1, 2, 3, 'A', 'B', true, false]

전개 연산자는 배열을 복제할 때도 유용하게 사용할 수 있는데요.

const original = [1, 2, 3];
const clone = [...original];
console.log(original); // [1, 2, 3]
console.log(clone); // [1, 2, 3]

물론, concat() 메서드로도 동일한 효과를 낼 수 있습니다.

const original = [1, 2, 3];
const clone = [].concat(original);
console.log(original); // [1, 2, 3]
console.log(clone); // [1, 2, 3]

주변에 보면 전개 연산자를 쓰는 편이 코드를 읽기가 더 편한다고 하시는데 저는 개인적으로 가독성에 큰 차이가 있어 보이지는 않는 것 같아요.

마치면서

지금까지 자바스크립트에서 배열을 합치는 대표적인 2가지 방법인 concat() 메서드와 전개 연산자에 대해서 알아보았습니다.