최상단 광고

2012년 4월 16일 월요일

[C++강좌] - 2-3. Reference와 함수

으헝... 
월요병이 도져서... 또 길게 쉬다 왔네요...
본의 아니게...

시작합시다.

  *이 강좌는 C언어를 끝냈다는 가정하에 실시합니다.

┌───────────────┐
---앞으로의 목차---
2-3. 레퍼런스와 함수
2-4. 레퍼런스의 이용
2-5. 레퍼런스와 함수 II
└───────────────┘

<지난 강좌를 살펴보고 와주세요 !! : http://blog.naver.com/owndks98o/120155834133 >

2-3. 레퍼런스와 함수

이번강의에서는 레퍼런스의 강력한 장점을 알아보죠.

그에 앞서,
Call-By-Reference
란 말의 의미를 아세요?

C를 열심히 배우셨다면 아실거라고 믿어 의심치 않습니다만,
노파심에 다시 한번 설명해 드리자면, "함수를 호출할때에 전달인자를 복사하지 않고 넘겨주는 방식"
이라고 간결하게 설명할수 있을것 같습니다.

간단한 예제로 살펴보죠.

/*
swap_ptr.cpp
*/
#include
using namespace std;

void swap(int *a,int *b);

int main(){
int x=0,y=1;

cout<
swap(&x,&y);
cout<

return 0;
}

void swap(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}

포인터를 이용한 간단한 swap함수의 예제입니다.
하지만, 이 소스는 포인터를 이용했기에, 치명적인 문제가 있습니다.

바로,
"포인터 연산의 실수 에 따라 발생하는 문제"
이죠.

포인터는 주소값을 가지고, 메모리를 직접참조하는 C만의 기법이기 때문에, 자칫 연산의 실수가 일어나면 프로그램 전체가 종료 될만큼 위협적인 에러를 자랑합니다.

그래서 포인터의 연산이 필요없는, 즉,
포인터 연산의 실수에 대한 걱정 및 우려가 적은 레퍼런스를 사용하는 것입니다.
예제를 레퍼런스로 바꿔보죠.

/*
swap_ref.cpp
*/
#include
using namespace std;

void swap(int &a,int &b);

int main(){
int x=0,y=1;

cout<
swap(x,y);
cout<

return 0;
}

void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}

달라진 부분에만 조금 표기해 보았습니다.
swap함수에서 레퍼런스로 받기 때문에, 메인함수에서도 주소값을 넘겨줄 필요가 없으며,
swap함수에서도 포인터 연산자 '*'를 사용할 필요가 없어,
딱봐도 소스가 훨씬 간결하고 아름다워진 것을 보실수 있으실것입니다.

즉, 레퍼런스를 사용하며 소스의 간결성과 안정성, 두마리 토끼를 잡을수 있습니다.

이상으로 다음강에서 만나죠~

댓글 없음: