카테고리 없음

Call by Value vs Call by Reference

보리시스템 2023. 4. 19.

원시/객체 타입이 함수의 인자로 할당 받고 매개변수로 전달될 때 어떤 방식으로 전달될지를 결정하는 방식

 

  값에 의한 호출 참조에 의한 호출
특징 - 인수의 복사본이 함수에 전달
(원시 값을 갖는 변수를 다른 변수에 할당하면 원시 값이 복사되어 전달 됨)

- 함수 내에서 매개변수(parameter)의 값이 변경되더라도 인수의 원래 값에는 영향을 미치지 않음
- 인수의 참조(reference)가 함수에 전달
- 함수 내에서 매개변수의 값이 변경되면 인수의 값도 변경
장점 인수를 보호하고 예측 가능한 결과를 제공 인수의 값을 직접 변경할 수 있으므로 메모리 사용이 효율적
단점 큰 객체를 전달할 때 비용이 더 많이 듦 예상치 못한 부작용이 발생할 수 있음

 

  • JS는 무조건 Call by Value 방식

 

  • 한 번 메모리 공간에 저장한 원시 값은 변경 불가능한 값
    • 우리가 바꾸는 값은? 새로운 메모리 공간에 값을 재할당하고, 변수가 참조하고 있던 메모리 주소를 변경하는 것

 

  • 얕은 복사는 왜 이루어지는지?
정의 주소값이 복사되는 것
장점 같은 객체를 공유하므로 메모리를 절약하고, 빠름
*참조에 의한 호출(Call By Reference)에서 얕은 복사가 이루어 지는 이유 중 하나이기도 하다.