본문 바로가기
Programming/C++

[Modern C++ 공부 - Day2] 값에 의한 전달 Pass by value

by 롱일스 2023. 6. 15.
반응형

Modern C++ 공부 Day 2입니다.

오늘 공부할 내용은 함수 인자 전달 방식 중 하나인 Pass by value입니다.

함수 인자의 전달 방식은 다양하게 존재하는데, 오늘은 그 중 pass by value에 대해 먼저 설명하겠습니다.

이전 포스트를 보고 오시면 도움이 됩니다.

2023.06.15 - [Programming/C++] - [Modern C++ 공부 - Day1] 지역 변수 local variable

 

[Modern C++ 공부 - Day1] 지역 변수 local variable

Modern C++ 공부 Day 1입니다. 본격적으로 Modern C++에 대해 알아보기 전에 기본적인 개념을 먼저 복습하고자 합니다. 오늘 다룰 내용은 지역 변수 (Local variable)입니다. 지역 변수는 특정 scope (범위) 내

huangdi.tistory.com

 

Pass by value

Pass by value는 변수를 함수에 전달할 때 해당 변수의 복사본을 생성하는 방식을 말합니다. 이렇게 복사된 변수는 함수의 범위 내에서 지역 변수로 사용되며, 원래 변수의 값에는 영향을 주지 않습니다. 함수에서 반환(return)되는 값도 본래의 변수가 아닌 그 복사본입니다. 이로 인해 함수 외부에 있는 원본 변수의 값이 보호되는 장점이 있습니다. 아래의 코드를 통해서 직관적으로 이해해봅시다.

int test(int y) {      // y는 test함수 내에서 지역변수이고, 함수 호출자의 변수 x의 복사본
	return y;
}

int x = 2;
int z = test(x);   // z는 함수 test의 반환자의 복사본이다.

위의 코드를 맨 윗줄부터 차례로 살펴봅시다. 

  1. int test(int y): 함수 test를 정의합니다. 이 때 함수에 전달되는 인자인 변수 y는 함수 test 내에서 지역변수입니다. 
  2. return y: 함수 test에서 변수 y를 반환할 때 y의 복사본이 전달됩니다.
  3. int x = 2: 변수 x를 2로 초기화합니다.
  4. int z = test(x): 함수 test를 호출하고 함수의 인자로 변수 x의 복사본이 전달됩니다. 즉 함수 test에서 변수 y는 변수 x의 복사본이 됩니다. 변수 z는 함수 test의 반환자인 y의 복사본이 됩니다.

 

위의 설명이 더 납득이 가도록 아래의 코드를 통해 변수들이 서로의 복사본인지 아닌지를 확실히 알아보겠습니다.

각 변수의 주소를 출력해서 만약 변수들의 주소값이 동일하다면 같은 변수라는 의미이고 주소값이 다르다면 같은 변수가 아니라는 의미이니 복사본이라는 걸 알 수 있습니다.

#include <iostream>

using namespace std;

int test(int y) {
	cout << "변수 y의 주소는: " << &y << endl;
	y = 20;
	return y;
}

int main() {
	int x = 10;
	cout << "변수 x의 주소는: " << &x << endl;
	int z = test(x);
	cout << "변수 z의 주소는: " << &z << endl;

	cout << "함수 test 호출 후 변수 x값은: " << x << endl;
	cout << "함수 test 호출 후 변수 z값은: " << z << endl;
	
	return 0;	
}

위 코드를 컴파일하면 다음과 같은 출력값이 나옵니다.

변수 x의 주소는: 0x61ff0c
변수 y의 주소는: 0x61fef0
변수 z의 주소는: 0x61ff08
함수 test 호출 후 변수 x값은: 10
함수 test 호출 후 변수 z값은: 20

출력값을 통해 알 수 있듯이,

  1. 변수 x, y, z는 모두 다 다른 주소값을 가진 각기 다른 변수이고, 
  2. 변수 x값을 함수에 전달했어도 복사본이 전달되기 때문에 함수 외부에 있는 변수 x의 값에는 전혀 변화가 없다.

 

요약

  • Pass by value는 변수를 함수에 전달할 때 해당 변수의 복사본을 생성하는 방식.
  • 이렇게 복사된 변수는 함수의 범위 내에서 지역 변수로 사용되며, 원래 변수의 값에는 영향을 주지 않습니다.
  • 함수에서 반환(return)되는 값도 본래의 변수가 아닌 그 복사본입니다.
  • 함수 외부에 있는 원본 변수의 값이 보호되는 장점이 있습니다. 

 

지금까지 Pass by value에 대해서 알아봤습니다.

다음 포스트에서는 Pass by Address  주소에 인한 전달에 대해 알아보겠습니다.

 

다음 글로 바로가기!!

2023.06.15 - [Programming/C++] - [Modern C++ 공부 - Day3] 주소에 의한 전달 Pass by Address

 

728x90
반응형