Developer MJ Story

[C++/Reference] 참조자 활용 방법 본문

Software/C++

[C++/Reference] 참조자 활용 방법

집근처 2014. 9. 26. 19:03
반응형

이전 포스팅에서 참조자에 대해서 알아 봤습니다.

그런데…..이거 도통 어디에 쓰이는지…….. 모르겠죠?? 왜 쓰는지도 모르겠고요…ㅋ

그래서 이번 포스팅에서는 참조자reference 활용 방법에 대해서 알려드리겠습니다.

 

먼저, C언어에서 중요한 포인트 중의 하나가 call-by-value냐 call-by-reference냐가 있습니다.

참조자가 reference니까 call-by-reference와 연관이 있을 것 같습니다.

저의 설명은 call-by-value/call-by-reference에 대해서 이미 숙지하고 있다는 가정하에 설명 드립니다.

 

먼저 call-by-reference를 참조자를 이용해서 구현한 예제를 설명 드리겠습니다.

void swapByReference(int &ref1, int &ref2){

    cout << "ref1 address : "<< &ref1 <<endl;

    cout << "ref2 address : "<< &ref2 <<endl;

    int temp = ref1;

    ref1 = ref2;

    ref2 = temp;

}

 

int main( ) {

    int num1 = 10;

    int num2 = 20;

 

    cout << "num1 address : "<< &num1 <<endl;

    cout << "num2 address : "<< &num2 <<endl;

 

    swapByReference(num1, num2);

 

    cout << "num1 : "<< num1 <<endl;

    cout << "num2 : "<< num2 <<endl;

}

swapByReference()의 인자가 참조자로 선언 되어있습니다.

이 의미는 swapByReference()함수의 인자로 넘어가는 num1, num2 값과 함수의 인자로 받는 ref1, ref2가 가리키는 값이 같다는 의미 입니다.

각각의 주소 값을 출력해보면 num1과 ref1, num2와 ref2 값이 같은 것을 확인 할 수 있습니다.

따라서 num1과 num2의 값이 변경 되어 출력 되는 것을 확인 할 수 있습니다.

 

사실 이렇게 사용하느니, 그냥 포인터를 인자값으로 넘겨 주면 더 쉬운 것 같다고 생각하실 수 있습니다.

맞는 말이기도 하고 틀린 말이기도 합니다. 왜냐하면, 같은 주소 값을 가리킨다는 것은 단순 변수를 포인터로 넘겨주는 것 보다 엄청난 일을 할 수 있습니다.

그것은 바로 구조체를 넘겨 줄 수 있다는 의미입니다.

참조자를 함수의 인자로 사용하면 구조체를 바로 넘겨 줄 수 있게 됩니다.

좋은 기능인 것 같죠??ㅎㅎ

잘만 사용하면, 쉽고 빠른 프로그램을 만들 수 있게 됩니다.

 

그리고 또 한가지, cont이다.

참조자를 선언할 때 cont를 붙이면, 해당 함수 내에서 해당 변수로 값 변경이 불가능하며, 참조만 가능하다.

해당 함수내에서 참조만 가능하게 하고 싶다면 꼭, const를 선언하자.

반응형