Call by value, Call by reference

Call by value와 Call by reference는 프로그래밍 언어에서 함수 호출 시 인자가 어떻게 전달되는지를 나타내는 용어이다.

Call by Value:

  • 함수 호출 시 매개변수로 복사된 값이 전달되는 방식
  • 원본 값이 함수에 전달되는 것이 아니라 값의 복사본이 생성되어 함수 내에서 사용
  • 함수 내에서 매개변수 값이 변경되어도 원본 값은 영향을 받지 않는다.

Call by Reference:

  • 함수 호출 시 값의 주소(참조)가 전달되는 방식을 의미합니다.
  • 함수 내에서 매개변수 값을 변경하면 원본 값도 변경
  • 주로 객체와 배열과 같이 복잡한 데이터 구조를 다룰 때 발생하는 현상

JavaScript의 관점

JavaScript에서는 기본적으로 둘 모두에 해당하지 않는 특성을 가진다. 대신 Call by sharing 또는 Call by object reference라는 개념을 사용한다.

JavaScript의 기본 타입(Primitive types)인 숫자, 문자열, 불리언 등은 Call by value처럼 동작한다. 함수 내에서 매개변수 값을 변경하더라도 원본 값은 변하지 않는다.

하지만 JavaScript의 객체(Object)와 배열(Array)은 Call by reference처럼 동작한다. 함수에 객체나 배열을 전달하면 해당 객체나 배열의 참조가 함수 내에 복사되며, 함수 내에서 해당 객체나 배열을 변경하면 원본 객체나 배열도 변경된다.

// Call by reference behavior for objects and arrays
function modifyArray(arr) {
  arr.push(4)
}
 
const myArray = [1, 2, 3]
modifyArray(myArray)
 
console.log(myArray) // Output: [1, 2, 3, 4]