call by value와 call by reference

최준호·2022년 7월 31일

call by value와 call by reference는 프로그래밍을 배우면서 꼭 알아야 하는 필수 개념중 하나이다. 만약에 이 두가지의 개념을 제대로 이해하지 못하고 코드를 작성하게 되면, 예상치 못한 곳에서 생각지 못한 오류가 발생활 확률이 높아진다. 코드는 논리를 기반으로 작동하기 때문에 정확한 논리가 없다면 의도하지 않은 결과가 발생 할 수 있다.

call by value - 불변한 값

call by value는 원시(primitive) 형태의 "값"을 사용하는 경우를 이야기한다. "a", "b", "c"와 같이 고정적으로 정의하고 사용하는 불변적인 값이다. 이미 나는 call by value를 이용하여 코드를 만들어 사용하고 있다.

function sum(a, b) {
  const result = a + b;
  
  a = 0;
  b = 0;
  
  return result;
}
  const a = 1;
  const b = 2;

  const result = sum( a, b);

console.log(a, b);  // 1, 2
console.log(result);  // 3

call by value는 원본 "값"과 동일한 값을 복사해서 사용하는 개념이다. 값을 전달하는 함수나 단락에서 값을 변경해도 복사해서 가져온 값이 수정될 뿐 원본에는 영향이 생기지 않는다.

call by reference - 불변하지 못한 값

call by reference는 참조(reference)값을 사용하는 경우를 말한다. 앞에서 말한 call by value와는 반대라고 할 수 있다. 값이 원시(primitive)가 아닌 참조(reference)이다.

function sum(obj) {
  const result = obj.a + obj.b;
  
  obj.a = 0;
  obj.b = 0;
  
  return result;
}

const obj = {
  a : 1,
  b : 2,
}

const result = sum(obj);

console.log(obj.a, obj.b); // 0 ,0
console.log(result); // 3

call by reference도 call by value와 동일하게 원본 값을 복사해서 사용하지만, 원본 값이 가리키는 대상이 "값"이 아닌 "주소 값"이다.

정리하기

call by value와 call by reference의 정의와 차이점을 알아보았다. call by value와 call by reference 는 "값"을 매개변수로 사용하는 상황을 이야기하고, 이때 사용되는 "값"을 사용할지 "참조 값"을 사용하는지에 따라 by value 혹은 by reference라고 정의한다.

profile
LV2 프론트엔드 엔지니어

0개의 댓글