1. 기술/웹, 자바스크립트

JavaScript - 객체 참조, concat()

swsong 2019. 10. 26. 00:09
생활코딩 이고잉님 강의(JavaScript Immutability)
수강 중 정리한 내용입니다.

 

배열 객체는 내장된 push 메소드를 통해 배열에 원소를 추가하고, 추가한 원소를 반환할 수 있다.

그런데 만약 여러 변수에 특정 배열을 똑같이 담고 그 특정 배열에 push를 통해 원소를 추가한다면 원소가 추가된 새로운 배열이 모든 변수에 공유된다.

자바스크립트에서는 변수가 객체를 담으면 실제로는 객체의 위치를  가리키고 있는 것이기 때문에 이러한 값이 저장된 변수가 복사되었을 때 객체 자체가 복사되는 것이 아닌 하나의 위치에 있는 원본(유일한) 객체를 가리키는 위치가 복사된다.  그래서 push를 통해 원본(유일한) 객체에 원소를 추가한다면 공유된 여러 변수가 모두 변화된 값을 가진다.

만약 이러한 특징을 이용해서 수많은 변수를 동시에 변경하려는 '의도'를 가지지 않고 이러한 특성을 잘 알지 못한 채 수 많은 변수를 동시에 변경시켜버리는 '실수'를 저지른다면 코드 전체가 망가질 것이다. 이렇게 오류를 범하는 일을 방지하기 위해 자바스크립트는 concat() 이라는 함수를 제공한다.

concat()은 호출한 배열에 원소를 추가해서 '새로운 배열'을 만들고 그 배열을 가리키는 위치를 반환하는 메소드다. score는 수정되지 않았고 score에 4가 추가된 새로운 배열이 afterScore의 값으로 지정된 것을 볼 수 있다.