C++에서 함수에 데이터를 전달하는 방법은 크게 두 가지로 나뉜다.
- 값에 의한 호출
- 참조에 의한 호출
오늘은 이 두 방법의 데이터 전달 방식과 함수 내에서 값이 처리되는 방식에서의 차이를 알아본다.
1. 값에 의한 호출(Call by Value)
값에 의한 호출은 원본 데이터를 복사해서 함수에 전달한다.
함수 내부에서 값이 변경되어도 원본 데이터에는 영향을 받지 않는다.
#include <iostream>
using namespace std;
void changeValue(int x) {
x = 42; // 복사된 값만 변경
}
int main() {
int a = 10;
changeValue(a);
cout << "a: " << a << endl; // a는 여전히 10
}
값에 의한 호출은 원본 데이터를 안전하게 유지하지만, 복사가 발생하기 때문에 데이터 크기가 크거나 복사가 잦을 경우 성능에 영향을 줄 수 있다.
2. 참조에 의한 호출(Call by Reference)
참조에 의한 호출은 함수가 원본 데이터를 직접 참조하도록 한다.
함수 내부에서 값을 변경하면 원본 데이터도 함께 변경된다.
#include <iostream>
using namespace std;
void changeValue(int &x) {
x = 42; // 원본 데이터를 직접 변경
}
int main() {
int a = 10;
changeValue(a);
cout << "a: " << a << endl; // a는 42로 변경된다
}
참조에 의한 호출은 복사 과정을 없애 성능을 개선할 수 있지만, 원본 데이터가 수정될 위험이 있으므로 주의가 필요하다.
요약
호출방식 | 데이터 전달 방식 | 함수 내 수정 영향 | 성능 |
값에 의한 호출 | 데이터 복사 | 원본에 영향 없음 | 복사 비용 발생 |
참초에 의한 호출 | 원본 데이터 참조 | 원본에 영향 있음 | 복사 비용 없음 |
정리
- 데이터 보호가 중요하다면 값에 의한 호출을 사용
- 성능 최적화가 필요하거나 데이터를 수정해야 한다면 참조에 의한 호출이 적합