본문 바로가기

컴퓨터

2-5 레퍼런스를 이용한 성능의 향상

부담스러운 Call-By-Value

거두절미 하고 아래의 Call-By-Value 예제를 보자.

#include <iostream>

using std::cout;
using std::endl;
using std::cin;

struct _Person {
	int age; //나이
	char name[20]; //이름
	char personalID[20]; //주민등록 번호
};
typedef struct _Person Person;

void ShowData(Person p) {
	cout << "****** 개인 정보 출력 ******" << endl;
	cout << "이    름: " << p.name << endl;
	cout << "주민번호: " << p.personalID << endl;
	cout << "나    이: " << p.age << endl;
}

int main(void) {
	Person man;

	cout << "이    름: ";
	cin >> man.name;
	cout << "주민번호: ";
	cin >> man.personalID;
	cout << "나    이: ";
	cin >> man.age;

	ShowData(man);
	return 0;
}

31: Call-By-Value 로 구조체 man을 전달하고 있다. 그러면 다른 메모리에 복사되어 저장되는데 얼마의 메모리가 필요한가? int 형 변수 하나 4byte, 길이가 20인 char형 배열 두개 2×20byte, 총 44byte나 필요하다. 

이 때, 전달되는 인자를 레퍼런스 형태로 받게 되면, 이름만 하나 더 추가하는 것이므로 44바이트나 되는 크기의 복사를 발생하지 않는다. 포인터를 쓰지 않고도! 7행을 다음과 같이 수정해보자.

void ShowData(Person &p) {

그런데 함수 ShowData는 인자로 전달된 구조체 변수의 데이터를 출력하는 함수이지, 데이터 자체를 조작하기 위한 함수는 아니다. 실수로 데이터를 변경할 수도 있는데 일을 막기위해 아래와 같이 7행을 다시 수정해보자.

void ShowData(const Person &p) {

'컴퓨터' 카테고리의 다른 글

3-2. 클래스와 객체  (0) 2019.04.07
2-7. new & delete  (0) 2019.04.06
2-4. 레퍼런스와 함수  (0) 2019.04.05
2-3 레퍼런스(Reference)의 이해  (0) 2019.04.05
1-5. 이름공간(namespace)에 대한 소개  (0) 2019.04.05