•
내가 사직서를 쓴다고 가정했을 때, 이미 뽑아져있는 걸 쓰느냐 아니면 똑같은 양식을 새로 뽑아 쓰느냐
•
Call By Value(값에 의한 호출)
◦
똑같은 양식이지만 새로 사직서를 출력해서 쓰는 것이다.
◦
인자로 받은 값을 복사하여 처리, 복사하여 처리하기 때문에 기존 변수의 값은 보존된다.
◦
간접 참조를 하기 때문에 메모리 사용량이 늘어난다.
•
Call By Reference(참조에 의한 호출)
◦
기존에 뽑아두었던 사직서를 가져다 쓰는 것이다.
◦
인자로 받은 값을 값을 직접 참조, 즉 함수로 전달된 값이 변경할 경우 원본도 같이 변경된다.
◦
직접 참조를 하기 때문에 데이터에 의도하지 않은 변경이 발생할 수 있다.
⇒ 원본값을 바꿀 필요가 있다면 reference, 없다면 value
언어별 차이
•
C
◦
C언어는 Call By Value, Call By Reference 둘 다 제공한다.
1.
Call By Value
void swap(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
sawp(a,b);
}
C
복사
•
위 코드에서 swap 함수의 범위에서는 a, b 변수의 주소가 새로이 생성되면서 값도 변경되지만 swap 함수의 범위를 벗어나면 a, b의 값은 그대로 10, 20을 유지한다.
•
위 함수에서 매개변수에 값을 넘겨줄때, 그 값을 복사해 넘겨주므로 Call By Value다.
2.
Call By Reference
void swap(int &a, int &b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 10;
int b = 20;
sawp(a,b);
}
C
복사
•
주소값을 매개변수로 받는 Swap이 있다.
•
Call By Value의 코드와는 다르게 주소값을 매개변수로 넘겨주는데 이 경우, 값이 변경된다.