C++] 기초(7) - 참조자(Reference)
** 본 게시물은 C++을 복습하며 정리하는 글입니다. 틀린 부분이 있다면 지적 부탁드립니다!! 현재 "윤성우의 열혈강의 C++"교재로 공부중이며 좀 더 상세한 설명을 원하시는 경우에는 책을 구매해서 찾아보시길 권장합니다.
[들어가기 전]
C언어에서 포인터의 개념을 습득하였을 것이다. 참조자는 성격상 포인터와 유사하다고 생각할 수 있다. 그러나 참조자는 포인터를 모르는 사람도 충분히 이해할 수 있으므로 포인터와 굳이 비교해서 머리아파하지 말자.
(Reference의 등장배경)
변수는 할당된 메모리 공간에 붙여진 이름이며, 그 이름을 통해 해당 메모리에 접근할 수 있다. 근데 같은 메모리 공간에 다른 이름(변수)으로 접근할 수 없을까?? 이렇게 등장한 것이 바로 "Reference(참조자)"이다.
쉽게 설명하자면, 'int nVal1 =7;'이라고 메모리에 7을 저장한 nVal1 변수를 선언했다고 가정하자. 우리는 7이라는 숫자가 저장된 메모리공간에 접근하기 위하여 nVal1이라는 변수를 사용할 것이다. 근데 nVal1외에도 다른 이름으로 해당 메모리에 접근하고 싶다.
그럴경우 'int &nVal2 = nVal1;' 이라고 명시하면 7이 저장된 메모리공간에 nVal2라는 변수명으로 접근할 수 있다. 여기서 &연산자는 주소 값을 반환하는 역할 외에도 다른 역할로 사용됨을 알 수 있다.
1)
int nVal1 = 7;
int &Val2 = nVal1;
nVal1 / nVal2 |
(메모리공간) 7 |
2) (참조자는 하나의 변수에 여러개를 사용할 수 있다.)
int nVal1 = 10;
int &nVal2 = nVal1;
int &nVal3 = nVal1;
nVal1 / nVal2 / nVal3 |
(메모리공간) 10 |
이런 그림으로 상상하면 이해가 쉽다. (결국 변수에 별칭하나를 더 붙여주는 것이다.)
[예제]
ex)
출력결과)
nVal : 7
ref1 : 7
ref2 : 7
ref3 : 7
[추가]
1) 참조자의 선언 범위
변수와는 다르게 참조자는 선언과 동시에 누군가를 가리켜야 한다. 예를 들면
"int &ref;"처럼 선언만 하면 안된다는 것이다.
불가한 코드)
int &ref; (x)
int &ref = 20; (x)
int &ref = NULL; (x)
그러나 배열의 요소는 참조할 수 있다. 배열은 메모리상에 접근하기 위한 변수들의 연속된 집합이므로 참조자로 가리키는 것이 가능하다.
ex)
출력결과)
refArr1 : 1
refArr2 : 2
refArr3 : 3