자바스크립트라는 언어를 배우면서 다른 언어와는 어떤점이 다른가에 대해서 고민을 한적이 있었고, 그 중 하나가 바로 오늘 이야기할 주제이다.
1. Call by reference와 Call by value란?
함수 호출의 대표적인 방법는 call by reference와 call by value가 있다.
call by value의 경우 값을 복사해서 호출하는 방법이고, call by reference의 경우 값을 참조해서 호출하는 방법이다. 사실 처음 배우는 입장이라면 참조가 어떤 개념인지 전혀 모를 수 있다고 생각한다. 참조라는 개념은 C의 주소값 개념을 이해하게 된다면 쉽게 이해할 수 있다.
2. 어? 자바스크립트 Call by reference처럼 동작하던데
자바스크립트 또한 c, c++ 처럼 call by referecne로 객체타입(Object)이 동작 할 거 같지만, 오히려 자바와 비슷한 방식으로 함수 호출을 진행하게 된다. 아래의 그림과 코드를 보면 자세하게 자바스크립트의 함수 호출이 어떻게 진행되는 지 알 수 있다.
let test = [1, 2, 3];
// 값이 변경되는 경우
function callbyValue(arr) {
arr[1] = 100;
}
callbyValue(test);
console.log(test); // [1, 100, 3]
위의 코드만 보게 된다면 첫번째 call by reference 그림처럼 '주소값자체가 넘어가기 때문에 원본 배열에 영향을 주는 거구나' 하고 넘어갈 수 있다. 이런 부분 때문에 call by reference라고 착각을 할 수 있다. 하지만 아래의 코드를 보면 call by value하는 것을 확인할 수 있다.
let test = [1, 2, 3];
// 값이 변경되지 않는 경우
function callbyValue(arr) {
arr = [10, 20, 30];
}
callbyValue(test);
console.log(test); // [1, 2, 3]
객체타입의 값을 함수의 인자로 넘기게 되는 경우 객체 내부의 속성값을 변경하는 경우에는 원본에 영향을 줄 수 있지만 call by value로 주소값을 상수로 복사해서 함수 호출을 진행하기 때문에 객체에 직접적인 주소값을 변경하게 될 경우 원본에는 영향을 주지 않는 것을 확인 할 수 있다.
3. 그래서 자바스크립트는 call by reference라고?
만약 면접자가 자바스크립트는 call by reference와 call by value 중에 어떤 방식으로 동작할까요? 라고 묻는다면 정답은 바로
call by value라고 대답을 해야된다.
'Programming > JavaScript' 카테고리의 다른 글
Deep copy와 Shallow copy (0) | 2024.03.29 |
---|---|
Comma를 찍는 다양한 방법 (0) | 2024.03.09 |
빈칸을 채우기 위한 padStart, padEnd (0) | 2022.11.17 |