본문 바로가기

전자 공학/C언어 C++

[C++ 독학하기] 4. 참조자(Reference)의 개념

반응형

안녕하세요. 취업한 공대누나입니다.

오늘은 참조자의 개념에 대해서 소스 코드와 함께 간단히 알아보도록 하겠습니다.


1. 참조자(Reference)란?

참조형 변수라고도 합니다. 변수는 할당된 메모리 공간에 붙여진 이름입니다. 우리는 이 이름을 가지고 해당 메모리 공간에 접근할 수 있습니다. 참조자는 할당된 하나의 메모리 공간에 다른 이름을 붙이는 것을 말합니다. 쉽게 말하면 별명을 붙이는 것입니다. 참조자가 처음 어떤 변수와 짝을 이루게 되면 그 짝이 달라지거나 하지는 않습니다. 즉, 한번 초기화되고 나서는 다른 변수를 참조하는 것은 불가능합니다.

 

원래 변수를 이름이라고 하고 참조자를 별명이라고 하면 아래와 같은 형식을 갖게 됩니다.

형식 &별명 = 이름

그렇다면 예제를 통해 보도록 하겠습니다.

 

처음에 test1이라는 변수를 선언했습니다.

그리고 test1의 별명, 즉 참조자로 test2로 선언한 것을 볼 수 있습니다.

이 때 두개의 값을 각각 출력해보면 test1을 처음 초기화 했을 때와 같이 1인 것을 알 수 있습니다.

주소값 역시도 두 변수가 같게 됩니다. 즉 같은 메모리 공간을 가리키고 있는 것을 확인할 수 있습니다.

그렇다면 참조자의 값을 바꾸게 되면 어떻게 될까요?

출력해보니 test1과 test2가 모두 바뀐 것을 확인할 수 있습니다.


2. 참조자는 선언과 동시에 초기화를 해야합니다.

참조자는 이미 선언되어져 있는 변수에 대해서만 선언이 가능합니다. 즉, 이름도 없는데 별명부터 만들 수는 없는 것입니다. 선언됨과 동시에 어떤 것을 참조해야만 합니다. 단, 상수에는 참조자를 선언할 수 없으며 NULL로 초기화하는 것도 불가능합니다.


3. 참조에 의한 호출(Call by Reference)

Call by value와 Call by reference가 있습니다.

여기서는 Call by value의 경우 값을 인자로 전달하는 함수의 호출방식인데, 외부에 선언된 변수에 대한 접근이 불가능합니다. 반면 Call by reference(참조에 의한 호출)는 주소 값을 인자로 전달하는 함수의 호출방식으로 외부에 선언된 변수에 대한 접근이 가능합니다. 여기서는 참조에 의한 호출만 보도록 하겠습니다.

 

change 함수 내부에서 주소값을 받아 그것을 참조해 직접 함수 외부에 있는 변수를 참조할 수 있는 것입니다. 여기서 change(&num1)이라고 하면 컴파일 오류가 나게 됩니다. 그래서 매개변수가 참조자인 경우 호출하는 코드만 봐서는 매개변수가 참조 형식이라는 것을 알 수 없습니다. 따라서 주의해서 코드를 분석해야합니다.


저는 지금 개인 공부를 하고 있는 중이라 이 모든 것들이 재밌게 느껴집니다.

학생 떄는 재미없었는데 말이죠..

다음 포스팅으로 돌아오도록 하겠습니다.

 

반응형