최상단 광고

2012년 4월 16일 월요일

[C++강좌] - 2-4. 레퍼런스의 이용

오늘은 얼마나 할수 있으려나? ㅋ

시작해 봅시다!!

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

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

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

2-4. 레퍼런스의 이용 

저번시간에는 Call-By-Reference 에 대해 알아보았습니다.
이번에는 그와 상반되는 말인,
Call-By-Value 에 대해 알아보겠습니다.

먼저, Call-By-Value란,
"함수의 호출에서 전달인자에 메모리를 복사해서 넘겨주는 것"
등으로 정의할수 있겠군요.

간단한 예제로 강좌를 시작해 봅시다.

/*
cbv.cpp //call-by-value
*/
#include
using namespace std;

typedef struct _MemDat{
char Name[20];
char ID[20];
char PS[20];
int age;
}MemDat;

void Show(MemDat md);

int main(){
MemDat md;
cout<<"Name : ";
cin>>md.Name;
cout<<"ID : ";
cin>>md.ID;
cout<<"PS : ";
cin>>md.PS;
cout<<"age : ";
cin>>md.age;

Show(md);
return 0;
}

void Show(MemDat md){
cout<<"Name : "<
cout<<"ID : "<
cout<<"PS : "<
cout<<"age : "<
}

 Call-By-Value의 기본 방식은 메모리의 복사입니다.
따라서 이런 방식은 메모리를 그냥 낭비하는, 어쩌면 정말로 몰상식한 행위를 일으키게 됩니다.

그렇다면 레퍼런스를 이용하여서 문제점을 고치려면 어떻게 해야 할까요?
매우 간단합니다.

void Show(MemDat md){ ...
이 부분을,
void Show(MemDat &md){...
로 고쳐주면 되는 것이죠!!(선언과 정의 모두)

//cbv2.cpp 예제는 올려두겠습니다.

이렇게 하면 몇 바이트나 되는 데이터를 복사하지 않아도 되므로, 성능면에서도 메모리 면에서도 win-win할수 있습니다.

또한가지 TIP을 보고 넘어가보죠.
우리가 만든 이 함수는 단지 데이터를 보여주기만 하는 함수입니다.
따라서 데이터를 수정한다거나 그럴필요는 없죠.

따라서,
void Show(MemDat &md){...
이 부분을,
void Show(const MemDat &md){
로 고쳐주면 더욱 효율적인 코딩이 가능해 집니다.

그럼 다음강에서~~

댓글 없음: