프로그래밍에서 함수를 호출할 때 인자를 어떻게 전달하느냐에 따라 결과가 달라질 수 있다. C++에서는 주로 두 가지 방식이 있다:
Call by Value (값에 의한 호출)
Call by Reference (참조에 의한 호출)
void modifyValue(int x) {
x = 10; // x는 복사본이기 때문에 원본에 영향 없음
}
int main() {
int a = 5;
modifyValue(a);
cout << a << '\n'; // 결과: 5
}
| 복사 비용이 적을 경우, 원본 보호가 필요할 때 사용
함수 내 변경이 원본 변수에 영향을 미침
& 연산자를 이용하여 참조로 매개변수를 전달함
void modifyReference(int& x) {
x = 10; // x는 a의 참조 → a의 값도 바뀜
}
int main() {
int a = 5;
modifyReference(a);
cout << a << '\n'; // 결과: 10
}
| 값 변경이 필요할 때, 큰 객체의 복사 비용을 줄이고 싶을 때 사용
void modifyPointer(int* x) {
*x = 20;
}
int main() {
int a = 5;
modifyPointer(&a);
cout << a << '\n'; // 결과: 20
}
| 포인터 방식은 null 체크나 주소 조작이 필요할 때 자주 사용

Call by Value → 안전하지만 비효율적일 수 있음
Call by Reference → 효율적이지만 원본이 바뀔 수 있음
상황에 맞게 잘 선택해야 성능과 안정성을 모두 챙길 수 있다