Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 참조 매개변수(Call by Reference) 사용법 완벽 정리

C++에서는 변수의 참조(reference)를 함수에 전달할 수 있습니다. 이를 흔히 '참조에 의한 호출(Call by Reference)'이라고 부릅니다.

참조에 의한 호출이란?

참조에 의한 호출 방식에서는 인자(argument)의 값 자체가 아니라 그 참조(주소)가 형식 매개변수(formal parameter)로 복사되어 전달됩니다. 따라서 함수 내부에서는 호출 시 사용된 실제 변수에 직접 접근하게 되며, 매개변수에 가한 변경 사항이 원본 변수에도 그대로 반영됩니다.

값을 참조로 전달하려면 다른 인자와 마찬가지로 참조를 함수에 넘기면 되고, 이에 맞게 함수 매개변수를 참조 타입으로 선언해야 합니다.

swap() 함수 예제

아래의 swap() 함수는 두 개의 정수 변수를 참조로 받아 서로 값을 교환하는 대표적인 예입니다.

// 두 값을 교환하는 함수 정의
void swap(int &x, int &y) {
    int temp;
    temp = x; /* x의 값을 임시 변수에 저장 */
    x = y;    /* y의 값을 x에 대입 */
    y = temp; /* 저장해 둔 원래 x의 값을 y에 대입 */
    return;
}

& 기호가 붙은 int &x, int &y가 바로 참조 매개변수입니다. 이렇게 선언하면 함수 내부에서 x와 y는 각각 호출 시 전달된 실제 변수 그 자체를 가리키게 됩니다.

전체 코드

이제 swap() 함수를 참조 방식으로 호출하는 전체 프로그램을 살펴보겠습니다.

#include <iostream>
using namespace std;

// 함수 선언
void swap(int &x, int &y);

int main () {
    // 지역 변수 선언
    int a = 100;
    int b = 200;

    cout << "Before swap, value of a :" << a << endl;
    cout << "Before swap, value of b :" << b << endl;

    /* 변수의 참조를 이용해 값을 교환하는 함수 호출 */
    swap(a, b);

    cout << "After swap, value of a :" << a << endl;
    cout << "After swap, value of b :" << b << endl;

    return 0;
}

실행 결과

Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100

정리

실행 결과를 보면 swap() 함수 호출 이후 a와 b의 값이 서로 바뀐 것을 확인할 수 있습니다. 만약 일반적인 '값에 의한 호출(Call by Value)' 방식을 사용했다면 함수 내부에서만 값이 복사되어 변경되고, main 함수의 원본 변수는 변하지 않았을 것입니다.

이처럼 참조 매개변수를 활용하면 함수가 여러 값을 반환해야 하는 상황이나 큰 객체를 효율적으로 전달해야 하는 경우에 유용하게 사용할 수 있습니다.