프로그래밍 언어에서 함수 호출 시 인자 를 전달하는 방식을 설명하는 개념 중 하나이다.
즉, '호출 방식' 의 종류이다.
학습 전에 알아야 할 개념이 있다.
프로그래밍 언어에서 변수에 저장되는 값의 종류도 두 가지가 있다.
number
string
boolean
null
undefined
object
나 array
을 수정하면 해당 객체나 배열이 변경된다.object
array
단어 그대로 '값' 에 의한 호출이다.
number
, string
, boolean
)은 Call by value 에 의한 호출로 전달된다.const changeValue = (x: number) => {
x = 10;
}
let a = 5;
changeValue(a);
console.log(a); // 5 (원본 변수 a는 변경되지 않는다)
단어 그대로 '참조' 에 의한 호출이다.
정확히 말하자면, '메모리' 를 공유하여 그 메모리 속에 저장된 변수를 참조한다는 뜻이다.
object
, array
) 등의 복합 데이터 타입은 Call by reference 에 의한 호출로 전달된다.const changeValue = (obj: object) => {
obj.value = 10;
};
let myObj = {
value: 5
};
changeValue(myObj);
console.log(myObj.value); // 10 (원본 변수 myObj의 값이 변경된다)
만약에 원본 object
가 있고, 이를 copy 한 object
가 있을 때, copy 한 object
의 value를 바꾸면 원본 역시 바뀐다.
예시는 다음과 같다.
const changeValue = (obj: object) => {
obj.value = 10;
};
let myObj = {
value: 5
};
let copyObj = myObj;
changeValue(copyObj);
console.log(myObj.value); // 5
즉, myObj
와 copyObj
는 메모리를 공유했기 때문에 어느 하나의 값이 변하면 공유하고 있는 변수는 모두 동일하게 변한다.
언어마다 호출방식이 상이할 수 있으며, 일부 언어에서는 명시적으로 호출방식을 지정하는 방법이 제공될 수도 있다.
이러한 호출 방식의 이해는 호출 시 인자의 동작을 이해하고 예상할 수 있도록 도와준다.