Pass by Reference vs Pass by Value
Title
Pass by Reference vs Pass by Value
Category
ProgrammingTags
Aliases
Pass by Reference vs Pass by Value
참조로 전달 vs 값으로 전달
Related
매개변수(parameter)-vs-인자(argument)
값(Value)
원시-값(Primitive)
객체(Object)
부수-효과(Side-Effect)
변성(Mutable)-vs-불변성(Immutable)
Created
2 years ago
Updated
last year
함수를 호출할 때, 함수에 전달된 인자(argument)는 매개변수에 복사된다.
js
function showMessage(from, text) {
console.log(from); // => 'Ahn'
console.log(text); // => 'Hello'
}
showMessage('Ann', 'Hello!');
function showMessage(from, text) {
console.log(from); // => 'Ahn'
console.log(text); // => 'Hello'
}
showMessage('Ann', 'Hello!');
JavaScript 값(Value)의 특성에 의해 원시 값(Primitive)은 '값 그대로' 복사되지만, JavaScript 객체(Object)는 '참조(reference)' 가 복사된다.
이를 구분하기 위해 참조로 전달(pass by reference)과 값으로 전달(pass by value)라는 용어를 사용하지만, 기존 변수에 값을 복사하는 원리와 동일하다고 볼 수 있다.
js
let foo = 1;
let bar = foo;
bar += 1;
console.log(foo); // 1
let objA = {
foo: 1,
};
let objB = objA;
objB.foo += 1;
console.log(objB.foo); // 2
let foo = 1;
let bar = foo;
bar += 1;
console.log(foo); // 1
let objA = {
foo: 1,
};
let objB = objA;
objB.foo += 1;
console.log(objB.foo); // 2
함수에서 참조로 전달된 객체가 변하는 부수 효과(Side Effect)를 막기 위해 전달된 객체를 불변(Immutable)하게 통제하는 방법을 사용하기도 한다.