본문 바로가기
javascript/모던 자바스크립트 Deep Dive

ECMAScript 에서의 공유에 의한 전달

by yongfront 2024. 2. 2.
반응형
SMALL

ECMAScript (JavaScript)에서 "공유에 의한 전달"은 객체와 배열과 같은 참조 타입(reference type)에 적용되는 개념입니다. JavaScript에서 객체와 배열은 변수나 함수에 할당될 때 그 값 자체가 아닌 참조(reference)가 전달됩니다. 이것은 "공유에 의한 전달"이라고 표현될 수 있습니다. 즉, 객체나 배열을 여러 변수에 할당하면 모두 동일한 객체 또는 배열을 참조하게 됩니다.

다음은 "공유에 의한 전달"을 보여주는 JavaScript 예제입니다:

let originalArray = [1, 2, 3];
let referenceArray = originalArray; // 참조 복사
referenceArray.push(4); // referenceArray를 수정
console.log(originalArray); // 출력 결과: [1, 2, 3, 4]
console.log(referenceArray); // 출력 결과: [1, 2, 3, 4]

위의 코드에서 **originalArray**와 **referenceArray**는 동일한 배열을 참조하므로 **referenceArray**를 수정하면 **originalArray**도 변경됩니다. 이것이 "공유에 의한 전달"의 핵심 개념입니다.

참조 타입에는 객체, 배열, 함수 등이 포함됩니다. 이러한 값들은 메모리 상의 위치(참조)를 공유하며, 변수나 함수 매개변수에 전달될 때 실제 데이터를 복사하는 것이 아니라 참조를 전달합니다. 이로 인해 변수 또는 함수 내에서 객체 또는 배열을 수정하면 원본 객체나 배열도 수정됩니다.

반면에 기본 타입(primitive type)인 숫자, 문자열, 불리언, null, undefined는 "값에 의한 전달"이 적용되어 실제 값을 복사하게 됩니다. 이러한 타입은 변수나 함수 매개변수에 전달될 때 값이 복사되므로 호출자(caller)의 데이터가 변경되지 않습니다.

 

사실은 값을 전달하는게 아니라 메모리 주소를 전달

 

JavaScript에서 객체와 배열과 같은 참조 타입(reference type)은 실제로 메모리 주소(참조)가 전달되는 것이 맞습니다. 정확한 용어로 말하면 "메모리 주소(참조)에 대한 복사"가 이루어집니다. 이런식으로 동작하는 이유는 JavaScript의 내부 동작 원리와 메모리 최적화를 위해서입니다.

기본 타입(primitive type)인 숫자, 문자열, 불리언, null, undefined는 실제 값이 복사됩니다. 이러한 타입은 크기가 작기 때문에 값을 복사하는 것이 효율적입니다. 하지만 참조 타입인 객체와 배열은 크기가 크고 복잡할 수 있으므로 메모리 주소(참조)를 전달하여 복사를 피하고 메모리를 효율적으로 사용합니다.

따라서 JavaScript에서는 "값에 의한 전달"과 "공유에 의한 전달"이 서로 다른 타입에 대해 동작하며, 참조 타입에서는 메모리 주소(참조)가 복사됩니다. 이러한 동작은 JavaScript의 타입 시스템과 메모리 관리에 대한 중요한 특성 중 하나입니다.

728x90
반응형
LIST

'javascript > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글

호이스팅  (0) 2024.02.02
일급 객체  (0) 2024.02.02
옵셔널 체이닝  (1) 2024.02.02
동적 타입 언어와 정적 타입 언어  (0) 2024.02.02
숫자타입  (0) 2024.02.02