C++ 참조(Reference) 핵심 개념과 포인터와의 차이점
참조 변수(reference variable)는 별명(alias), 즉 이미 존재하는 변수의 또 다른 이름입니다. 한 번 변수로 참조가 초기화되면, 변수 이름이나 참조 이름 중 어느 것을 사용해도 해당 변수를 가리킬 수 있습니다.
참조 vs 포인터
참조는 종종 포인터와 혼동되지만, 참조와 포인터 사이에는 세 가지 주요 차이점이 있습니다.
NULL 참조는 가질 수 없습니다. 참조가 항상 합법적인 저장소에 연결되어 있다고 가정할 수 있어야 합니다.
한 번 객체로 초기화된 참조는 다른 객체를 가리키도록 변경할 수 없습니다. 포인터는 언제든 다른 객체를 가리킬 수 있습니다.
참조는 생성 시 반드시 초기화되어야 합니다. 포인터는 언제든 초기화할 수 있습니다.
C++에서 참조 생성
변수 이름을 변수의 메모리 위치에 붙은 레이블이라고 생각하세요. 그러면 참조는 그 메모리 위치에 붙은 두 번째 레이블로 생각할 수 있습니다. 따라서 원래 변수 이름이나 참조 중 어느 것으로든 변수의 내용에 접근할 수 있습니다. 예를 들어 다음이 있다고 가정해 봅시다.
int i = 17;
i에 대한 참조 변수를 다음과 같이 선언할 수 있습니다.
int& r = i;
이 선언에서 &를 참조로 읽으세요. 따라서 첫 번째 선언을 "r은 i로 초기화된 정수 참조"로 읽고, 두 번째 선언을 "s는 d로 초기화된 double 참조"로 읽습니다. int와 double에 참조를 사용하는 예제:
Live Demo
#include <iostream>
using namespace std;
int main () {
// 단순 변수 선언
int i;
double d;
// 참조 변수 선언
int& r = i;
double& s = d;
i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl;
return 0;
}
위 코드를 컴파일하고 실행하면:
Value of i : 5
Value of i reference : 5
Value of d : 11.7
Value of d reference : 11.7
참조는 보통 함수 인자 목록과 함수 반환 값에 사용됩니다. 따라서 C++ 프로그래머가 명확히 알아야 할 참조 관련 두 가지 중요한 주제는 다음과 같습니다.
| 번호 | 개념 및 설명 |
| 1 | 매개변수로서의 참조
C++은 매개변수보다 더 안전하게 참조를 함수 매개변수로 전달하는 것을 지원합니다. |
| 2 | 반환 값으로서의 참조
다른 데이터 타입처럼 C++ 함수에서 참조를 반환할 수 있습니다. |