c++/c 언어 기반의 c++ 2

[C++] & 참조자 (Reference)의 이해

TIM_0529 2022. 12. 29. 02:07
반응형

C++의 '참조자'는 기능상 포인터와 비슷해 보이기 쉽다. 그러나 참조자는 포인터를 모르는 사람도 이해할 수 있는 개념이다.

 

참조자의 이해

변수의 정의를 살펴보자.

수는 할당된 메모리 공간에 붙여진 이름이다. 그리고 그 이름을 통해서 해당 메모리 공간에 접근이 가능하다.

예를 들어보자

int a = 10; 이라는 문장에서 과연 a 가 의미하는게 무엇일까

두 가지로 볼 수 있다.

1. 숫자 10 을 저장한 값 

2. int형 크기의 데이터를 저장할 수 있는 주소값의 닉네임. 

 

첫 번쨰 관점은 쉽게 이해가 간다. 왜냐하면 직관적으로  a 라는 값에 10 이라는 수를 대입 한다고 생각하면 이해가 된다. 하지만 두 번째 개념은 이해하기가 다소 쉽지 않을 수 있다. 

물론 설명이 부족해서 일 수도 있다. 

두 번째 개념을 다시 이야기 하면

컴퓨터는 데이터 (ex. 10) 를 저장하려면 어떠한 주소값이 있어야 한다. 하지만 그 주소값이 사람이 코딩하기에는 복잡하기 때문에 이런것을 에디터에서 컴파일을 통해 대신 해 준다.

 

다음 코드를 보면서 이해해 보자

 

int main()
{
	int a = 10;
	cout << "a = " << a << endl << "&a = " << &a << endl;
}

 

참조자 & 키워드를 이용해서 a 의 주소값을 확인해 보니 16진수로 이루어진 어떠한 값이 나왔다. 

이것이 a 의 진짜 이름이다. 

바로 데이터가 메모리에 할당된 공간을 알려준다.

 

& 을 이미 선언된 변수 (a) 앞에 선언하여 위에서 처럼 변수의 주소 값을 반환하기도 하지만 선언할 때 사용하여 '참조자' 로써 사용하기도 한다.

 

int main()
{
	int a = 10;
	int &b = a;
	cout << "a = " << a << "\t" << "&a = " << &a << endl;
	cout << "b = " << b << "\t" << "&b = " << &b << endl;
}

2 번째 라인에서 참조자 b를 선언을 했고 그 값에 a 를 넣었다. 

그리고 a 와 b 모두 같은 주소값을 가르키고 있다.

a 를 대신하여 사용할 수 있는 b 가 만들어진 것이다.;

 

참조자 사용시 주의할 점

참조자는 변수에 대해서만 참조가 가능하다

int &ref = 20;  (x) 아까 말했듯이 변수 a 는 주소값을 의미 하지만 20 은 실직적인 데이터 값 이므로 참조할 수 없다.

 

참조자는 선언과 동시에 초기화가 이루어져야 한다.

int &ref;  (x) 

 

참조자에 NULL 값을 넣는 것 또한 불가하다.

int &ref = NULL; (x) 

 

참조자의 활용에는 변수 보다는 함수가 큰 위치를 차지한다.

다음 포스팅에서 참조자에 실질적인 활용법을 알아보겠다.

반응형