매개변수 전달 기법은 함수가 호출될 때, 함수에 데이터를 전달하는 방법을 말한다.
매개변수를 전달하는 방식은 여러 가지가 있고, 각 기법은 함수 호출 시의 동작 방식과 메모리 사용에 따라 다르다.
- 값에 의한 전달
- 주소에 의한 전달
- 참조에 의한 전달
📌 값에 의한 전달( Call by Value )
값에 의한 전달은 가장 기본적인 매개변수 전달 기법이다.
함수 호출 시 매개변수에 전달된 값이 복사되어 함수의 지역 변수에 저장( Stack에서 관리 )된다.
- 함수 호출 시, 매개변수의 값이 복사되어 함수에 전달
- 함수 내부에서 해당 값을 수정해도 호출한 함수의 값은 변경되지 않는다.
예시
#include <stdio.h>
void Test(int x) {
x = 20; // 함수 내부에서만 x의 값이 변경됨
}
int main() {
int a = 10;
Test(a); // a의 값을 Test에 전달, 값이 복사됨
printf("%d\n", a); // 출력: 10
return 0;
}
📌 주소에 의한 전달( Call by Reference )
주소에 의한 전달은 함수 호출 시 매개변수의 주소를 전달하는 방식이다.
- 함수 호출 시, 매개변수의 주소가 전달된다.
- 함수 내부에서 해당 주소를 통해 원본 변수에 접근하여 값을 변경할 수 있다.
예시
#include <stdio.h>
void Test(int *x) {
*x = 20; // 포인터를 통해 원본 변수의 값을 수정
}
int main() {
int a = 10;
Test(&a); // a의 주소를 전달
printf("%d\n", a); // 출력: 20
return 0;
}
📌 참조에 의한 전달( Call by reference )
참조에 의한 전달은 주소에 의한 전달과 비슷한 방식으로, 함수 호출 시 매개변수의 참조를 전달한다.
- 함수 호출 시 매개변수의 참조가 전달된다.
- 함수 내부에서 해당 참조를 통해 원본 객체나 데이터를 수정할 수 있다.
#include <iostream>
using namespace std;
void Test(int &x) {
x = 20; // 참조를 통해 원본 변수 값 수정
}
int main() {
int a = 10;
Test(a); // 참조를 전달
cout << a << endl; // 출력: 20
return 0;
}
앞선 글에서 쓰레드마다 Stack의 크기는 1MB로 제한되기 때문에 매개변수로 데이터를 전달할 때
값 복사가 이뤄지지 않도록 해야한다.
'강의 정리 > 인프런' 카테고리의 다른 글
[인프런] 함수 호출 규약 (0) | 2025.03.11 |
---|---|
[인프런] 매개변수 전달 살펴보기 (0) | 2025.03.11 |
[인프런] Stack overflow ( 스택 오버플로우 ) (0) | 2025.03.10 |
[인프런] 함수 호출 관계 (0) | 2025.03.10 |
[인프런] 동적 라이브러리 개발 (0) | 2025.03.10 |