Call by reference란 무엇인가?

Call by reference를 알기 위해 평가 전략(컴퓨터 프로그래밍)을 먼저 보겠습니다.

  • 평가 전략(Evaluation Strategy)은 프로그래밍 언어에서 함수 호출의 아규먼트(argument)의 순서를 언제 결정하고 함수에 어떤 종류의 값을 통과시킬지 결정하는 것입니다.
  • 람다 대수에서 축소 전략(reduction strategy)과 유사하지만 다릅니다.
  • 근래의 대부분의 프로그래밍 언어들은 값에 의한 호출(call-by-value)과 참조에 의한 전달(pass-by-reference)가 통합되고 있습니다.

call-by-value에 대해서도 짚어보고 가겠습니다.

  • 값이 넘어올 때 복사된 값이 넘어옵니다.
  • caller(호출하는 녀석)가 인자를 복사해서 넘겨줬으므로 callee(호출당한 녀석)에서 해당 인자를 지지고 볶아도 caller는 영향을 받지 않습니다.
  • 기본적으로 자바스크립트는 원시값을 arguments로 넘겨주면 call by value의 형태로 작동합니다.

이제 본격적으로 call by reference에 대해 알아보겠습니다.

  • arguments로 reference(값에 대한 참조 주소, 메모리 주소를 담고있는 변수)를 넘겨줍니다.
  • reference를 넘기다 보니 해당 reference가 가리기는 값을 복사하지는 않습니다.
  • caller(호출하는 녀석)가 인자를 복사해서 넘기지 않았으므로 callee(호출당한 녀석)에서 해당 인자를 지지고 볶으면 caller는 영향을 받습니다.
  • 자바스크립트는 참조 타입을 arguments로 넘겨주면 call by reference의 형태로 작동한다라고 오해를 많이합니다.

자바스크립트에서 참조값을 넘기면 어떻게 되는가?

call by sharing이란?

  • 자바스크립트에서는 무조건 call by value로 작동합니다.
  • 자바스크립트(자바, 루비, 파이썬 등등도 마찬가지)에서는 참조 타입을 인자로 넘기면 참조값에 대한 복사본을 만들어서 넘깁니다.
  • C++을 배웠던 사람이라면 알고있던 call by value와는 다르단 느낌에 매우 혼동을 하게 됩니다. 따라서 이런 혼동을 줄이고자 call by sharing이 등장한 것 같습니다.

참고