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)
참조자의 활용에는 변수 보다는 함수가 큰 위치를 차지한다.
다음 포스팅에서 참조자에 실질적인 활용법을 알아보겠다.
'c++ > c 언어 기반의 c++ 2' 카테고리의 다른 글
[C++] 키워드 const의 의미 (0) | 2022.12.29 |
---|---|
[C++] 참조자와 함수(Call by Reference), const 참조자 (0) | 2022.12.29 |