값에 의한 전달과 참조에 의한 전달

사자·2022년 5월 10일
0

값에 의한 전달과 참조에 의한 전달

변수에 변수를 할당했을 때 무엇이 어떻게 전달되는지에 따라 값에 의한 전달과 참조에 의한 전달이 구분된다.

값에 의한 전달 (pass by value)

값에 의한 전달은, 숫자, 문자, Boolean 등 원시값이 담긴 객체에서 이뤄진다.

  • 전달하는 변수에 저장된 “값”을 다른 메모리 공간에 복사하여 전달받는 변수에 전달한다.
  • 원본과 사본 어느 한 쪽을 변경해도 다른 쪽이 영향을 받지 않는다. 즉 둘은 별개의 값이 되며, 서로 간섭할 수 없다.

참조에 의한 전달 (pass by reference)

참조에 의한 전달은, 객체와 배열 등 객체 타입의 값을 할당할 때 이뤄진다.

  • 전달하는 변수에 저장된 “참조값(할당된 객체가 담긴 메모리 주소)”을 다른 공간에 복사하여 전달받는 변수에 전달한다.
  • 변수들이 메모리 주소를 통해 같은 객체에 접근할 수 있다. 즉, 두 개의 식별자가 하나의 객체를 “공유” 한다.
  • 원본과 사본 어느 한 쪽에서 객체를 변경하면 서로 영향을 주고받는다.

🚨주의점

  • 자바스크립트에서의 참조에 의한 전달은 메모리 공간에 저장된 값을 복사해 전달한다는 점에서 값에 의한 전달과 동일하다. 변수에 저장된 값이 원시값이냐, 참조값이냐의 차이가 존재한다.
  • 따라서 자바스크립트에서의 참조에 의한 전달은 “공유에 의한 전달(pass by share)”이라고 표현하기도 한다. (공식 용어 x)

...에 의한 호출 vs ...에 의한 전달

“… 에 의한 호출(call by …)”은, 함수를 호출하면서 매개변수(parameter)에 값을 전달하는 방식을 말한다.

동작 방식은 “… 에 의한 전달(pass by …)” 과 동일하니, 값을 전달하는 것이 함수의 매개변수냐/아니냐를 두고 구분하면 된다!

profile
FrontEnd Developer 🦁사자의 성장 로그

0개의 댓글