본문 바로가기
개발 노트/기초 지식

call by value, call by reference

by tokkiC 2022. 6. 3.

값에 의한 전달(call by value)


call by value 는 인수로 전달되는 변수가 가진 값을 함수 내의 매개변수에 복사하는 방식이다

이렇게 복사된 값으로 초기화된 매개변수는 인수로 전달된 변수와는 완전히 별개의 변수가 된다.

따라서 함수 내에서의 매개변수 조작은 인수로 전달되는 변수에 아무런 영향을 미치지 않는다

매개변수로 값을 넣으면 함수에서 인자로 쓰일순있으나 함수 밖의 변수에 값을 변화시키지 못한다는 말이다


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


call by reference는 인수로 변수의 값을 전달하는 것이 아닌, 해당 변수의 주소값을 전달한다.

즉 함수의 매개변수에 인수로 전달된 변수의 원래 주소값을 저장하는 것이다.

이 방식을 사용하면 인수로 전달된 변수의 값을 함수 내에서 변경할 수 있게 된다.

참조를 통해 주소값을 인자로 사용하면 함수밖에 변수에 값을 변화 시킬수 있다는 말이다

 

아니 그렇다면 어쩔때 call by value 를 쓰고 어쩔때 call by reference 를 써야 할까?

바로, 매개변수의 타입에 따라서 call by value 인지 call by reference 인지를 알 수 있다

기본형 타입(Primitive Type) 참조형 타입(Reference Type)
숫자(Number)
문자열(String)
불리언(Boolean)
null
undefined
심볼(Symbol)
객체(Object)
배열(Array)
함수(Function)
날짜(Date)
정규표현식(RegExp)
Map
WeakMap
Set
WeakSet

표 출처: https://okayoon.tistory.com/entry/코어-자바스크립트-데이터-타입-기본형-타입Primitive-Type과-참조형-타입Reference-Type [Zzolab Blog :):티스토리] 

c언어에는 call by reference 가 없기 때문에 참조형 타입을 매개변수로 가질 수 없고

포인터를 매개변수로 사용해서 주소값을 통해 call by refernence 처럼 사용할 수 있다

이 말은 c언어는 포인터를 통한 주소값 변경을 통해서만 함수 밖의 변수를 제어 가능하다는 뜻이다.

댓글