참조 변수
참조 변수(reference variable)
참조형 변수는 다른 객체 또는 값의 별칭으로 사용되는 변수이다. 즉 참조 변수는 저장하는 변수의 메모리와 같은 주소를 참조한다.
1. 변수 참조
-
참조 변수의 선언
자료형& 별칭 = 저장할 변수;int iValue = 7; int& ref = iValue; std::cout << "iValue = " << iValue << std::endl; std::cout << "ref = " << ref << std::endl; std::cout << "iValue address = " << &iValue << std::endl; std::cout << "ref address = " << &ref << std::endl;
참조 변수는 null값을 참조할 수 없기 때문에 반드시 선언할 때 초기화를 해주어야 한다.
출력해보면 동일한 값과 주소가 나오는데 변수명만 다를 뿐 동일한 메모리를 사용하는 것을 알 수 있다.
-
참조 변수 재할당
int iValue1 = 7; int iValue2 = 9; int& ref = iValue1; ref = iValue2; std::cout << "iValue1 = " << iValue1 << std::endl << "iValue2 = " << iValue2 << std::endl << "ref = " << ref << std::endl; std::cout << "iValue1 address = " << &iValue1 << std::endl << "iValue2 address = " << &iValue2 << std::endl << "ref address = " << &ref << std::endl; // 출력결과 // iValue1 = 9 // iValue2 = 9 // ref = 9 // iValue1 address = 012FFC78 // iValue2 address = 012FFC6C // ref address = 012FFC78
참조변수의 값이 대입한 변수의 값으로 바뀌었다. 동시에 참조 변수를 초기화한 변수 또한 값이 변경되었다. 주소를 확인해보면 선언할 때 참조한 변수의 주소와 동일하다.
결국 참조변수는 한번 선언하면 참조할 변수를 재할당 할 수 없고 변수의 값만을 복사해서 저장하게 된다.
또한 원본 변수의 값도 바뀌는 것으로 동일한 메모리를 사용한다는걸 확인할 수 있다.
2. 매개변수로 활용
매개변수를 참조 변수로 사용한다면 동일한 메모리를 사용하기 때문에 값의 복사가 이루어지지 않기 때문에 크기가 큰 객체를 전달할 때에 드는 비용을 줄여 성능을 향상 시킨다.
-
Swap 함수
참조 변수와 원본 변수가 메모리를 같이 쓰는 점을 활용하여 포인터를 통해서 Swap 함수를 만들었던 것처럼 참조 변수로 만들 수 있다.#include <iostream> void Swap(int& _lhs, int& _rhs); int main() { int iLhs = 5; int iRhs = 10; std::cout << "before) iLhs = " << iLhs << ", iRhs = " << iRhs << std::endl; Swap(iLhs, iRhs); std::cout << "after) iLhs = " << iLhs << ", iRhs = " << iRhs << std::endl; } void Swap(int& _lhs, int& _rhs) { int temp = _lhs; _lhs = _rhs; _rhs = temp; }