매개변수 전달 기법은 함수가 호출될 때, 함수에 데이터를 전달하는 방법을 말한다.

 

매개변수를 전달하는 방식은 여러 가지가 있고, 각 기법은 함수 호출 시의 동작 방식과 메모리 사용에 따라 다르다.

  • 값에 의한 전달
  • 주소에 의한 전달
  • 참조에 의한 전달

 

📌 값에 의한 전달( 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로 제한되기 때문에 매개변수로 데이터를 전달할 때

값 복사가 이뤄지지 않도록 해야한다.

+ Recent posts