서론
C++에서 참조자와 역잠조는 메모리 주소와 관련된 중요한 개념입니다.
이 글에서는 이름이 비슷한 두 개념에 대해서 기술해 보려고 합니다.
참조자 (Reference)
참조자는 변수의 별명으로 사용됩니다.
이는 변수가 가진 값의 또 다른 이름을 만든다는 뜻 입니다.
참조자에는 몇가지 특징이 있습니다.
- 선언과 동시에 초기화
참조자는 선언될 때 반드시 초기화 되어야 합니다.
ex) int &ref = myVar; - 포인터와 구조적으로 유사
참조자는 구조적으로 포인터와 비슷하지만 사용법에 차이가 있습니다.
참조자는 한번 초기화되면 다른 변수를 참조할 수 없습니다. - 상수에 대한 참조는 불가
상수에 대하여 참조자를 선언할 수 없습니다.
ex) int &ref = 5; 와 같은 선언은 허용되지 않습니다. - 원본의 변경
참조자를 통해 값이 변경되면, 원본 변수의 값도 변경됩니다.
이는 참조자가 원본 변수의 메모리 주소를 공유하기 때문입니다. - Call By Reference
함수의 매개변수로 참조자를 사용하면, 함수가 변수의 주소를 받아 원본 데이터를 직접 수정할 수 있습니다.
이를 Call By Reference라고 합니다.
주로 덩치 큰 자료는 값이 아니라 주소를 전달하는 것이 효율적이기 때문에 참조자로 전달합니다.
ex) void testFunc(int &rParam) {...}
역참조 (Dereference)
역참조는 포인터 변수를 통해 메모리 주소에 있는 데이터에 접근하는 방법입니다.
역참조는 변수의 주소가 저장되어 있는 포인터 변수 앞에 ' * ' 연산자를 사용하여 수행합니다.
ptr이라는 포인터 변수가 있다면 *ptr은 포인터 변수가 가리키는 메모리 위치의 값을 반환합니다.
이러한 역참조를 통해 포인터가 가리키는 메모리 주소의 값을 읽거나 수정할 수 있습니다.
정리
참조자 (&)
변수의 별명을 만드는 것,
int &ref = var은 var 이라는 변수에 대한 참조 ref
역참조 (*)
포인터 변수가 가리키는 메모리 위치의 값에 접근하는것,
int *ptr = &var 이라는 포인터 변수를 선언 한 후 *ptr을 사용하면 var의 값에 접근
간단히 말해 참조는 기존 변수에 대한 별명을 제공하고,
역참조는 포인터가 가리키는 주소의 값을 조작하는 것이다.