


참조를 이용한 Call-by-reference

결론
1. Call by Value (값에 의한 호출)
"원본의 복사본을 전달"
- 작동 방식: 함수를 호출할 때 전달하는 변수의 값(Value)을 복사해서 함수의 매개변수에 넣는다.
- 특징: 함수 내부에서 매개변수의 값을 아무리 변경해도, 함수 밖에 있는 원본 변수에는 전혀 영향을 주지 않는다.
- 사용 목적: 원본 데이터를 보호하고 싶거나, 값을 바꿀 필요가 없을 때 사용한다.
// Call by Value 예시
void swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
함수가 끝나면 복사본은 사라지므로 main의 a와 b 값(10, 50)은 그대로 유지
2. Call by Reference (참조에 의한 호출)
"원본에 접근할 수 있는 주소(참조)를 전달"
- 작동 방식: 값 대신 주소 값(Address)을 전달하거나 참조자(Reference)를 통해 원본 메모리 공간에 직접 연결한다.
- 특징: 함수 내부에서 매개변수를 조작하면, 원본 변수의 값도 실제로 변경된다. 외부 메모리 공간에 직접 접근할 수 있기 때문이다.
// Call by Reference (포인터) 예시
void swap2(int *a, int *b) {
int temp = *a; // 주소가 가리키는 값을 가져옴
*a = *b; // 주소를 찾아가서 값을 바꿈 (원본 변경)
*b = temp;
}
main 함수에서 swap2(&a, &b)로 주소를 전달하면, 함수가 주소를 찾아가서 값을 실제로 바꾼다.
결과: main의 a와 b 값이 실제로 서로 바뀐다.(50, 10) .
// Call by Reference (참조자) 예시
void SwapByRef2(int &ref1, int &ref2) {
int temp = ref1;
ref1 = ref2; // 원본 변수의 별명(ref1)을 통해 직접 수정
ref2 = temp;
}
이 방식 또한 원본 변수에 직접 접근하므로 값이 실제로 바뀐다.
요약 비교
| 구분 | Call by Value | Call by Reference |
| 전달 내용 | 값의 복사본 10 | 주소 값 또는 참조 11 |
| 원본 영향 | 원본은 변하지 않음 | 원본이 변경될 수 있음 12 |
| 메모리 접근 | 함수 내부 메모리만 사용 | 외부(호출자)의 메모리에 접근 가능 |
| 결과 | a: 10, b: 50 (유지) 13 | a: 50, b: 10 (교환됨) 14 |
'tech > C++' 카테고리의 다른 글
| [C++] 접근제어 지시자 (0) | 2025.12.07 |
|---|---|
| [C++] 참조자를 선언할 때 잘못되게 선언되는 것 (0) | 2025.12.07 |
| [C++] 인라인 함수와 메크로 함수의 특징 (0) | 2025.12.07 |