call by value, call by reference 란?

park·2026년 2월 6일

call by value, call by reference 란?
함수 호출 시 값을 전달하는 방식을 의미합니다.

Call by Value

Call by Value는 값의 복사본이 전달되므로, 함수 내부에서 값을 변경해도 원본에는 영향이 없습니다.

Call by Reference

Call by Reference는 변수의 참조값(메모리 위치)이 전달되어, 함수 내부에서 값을 변경하면 원본에도 영향이 발생합니다.

자바스크립트에서의 동작

자바스크립트는 이론적으로 Call by Value만 사용합니다.
함수에 전달되는 것은 항상 “값”이며, (참조타입)객체의 경우 객체를 가리키는 참조값이 값으로 복사됩니다.

따라서 함수 내에서 객체의 속성을 변경하면 원본이 함께 변경되기 때문에
겉보기에는 Call by Reference처럼 동작하는 것처럼 보일 수 있습니다.


예시


1) 원시 값일 때

function change(x) {
  x = 20
}

let a = 10

change(a)

console.log(a) //10

Call by Value

(해설)
여기서 복사되는 건 숫자 10 자체

a → 10
x → 다른 10
이 경우,완전 별개.

따라서 a 안 바뀜.


2) 객체 속성 바꿀 때

function change(obj) {
  obj.value = 20
}

let data = { value: 10 }

change(data)

console.log(data.value) // 20

Call by Reference

(해설)
여기서 복사되는 건 객체가 아니라
“객체를 가리키는 참조값”
data ─┐____> 같은객체

obj ──┘

이 경우, 복사는 됐지만 같은 객체를 함께 본다.
따라서 값 바뀜.


3) 객체를 새로 재할당할 때

function change(obj) { 
    obj = { value: 20 } 
} 

let data = { value: 10 } 

change(data) 

console.log(data.value) //10

Call by Value

(해설)
obj 화살표만 다른 객체로 갈아탐

data → 원래 객체
obj → 새 객체
이 경우,
→ 서로 완전 분리.

따라서 data 안 바뀜.


profile
park

0개의 댓글