[C++] 2. call by value 와 call by reference의 차이
안녕하세요 고급 개발자가 꿈인 코린이 입니다.
지난 포스팅에 신입 개발자가 되기 전에 필요한 역량에 대해서 포스팅을 했는데요
그래서 앞으로의 c++포스팅은 신입 개발자분이 알아두면 좋은 문법들을 포스팅 하려고 합니다.
실제로 제가 포스팅하는 문법이나 개념들은 실제 업무에서 많이쓰고 있는 문법아니 표현으로
알아두시면 좋은 내용이 많습니다.
오늘은 call by value 와 call by reference의 차이점에 대해서 설명 드리겠습니다.
call by value는 프로그래밍을 배우신 분들이라면 가장 기본적으로 많이 쓰는 내용으로
함수에 그대로 매개변수를 넣어서 함수를 호출하는 것으로 매개변수에 어떠한 변수를 넣었다고해서
그 매개변수로 넣은 값이 변하지가 않습니다.
call by referece는 매개변수에 참조형 변수를 넣어서 호출을 하는데 매개변수로 넣었던 변수들이 변경이 되면
함수를 호출한 위치에서 변수의 내용이 변경이 됩니다.
말로 설명드리기만하니까 좀 어려운 부분이 있는데요
아래 코드를 보면서 설명 드리겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <iostream>
using namespace std;
void callbyvalue(int val1,int val2)
{
int temp;
temp = val1;
val1 = val2;
val2 = temp;
cout<<"swap data val1:" << val1 << " val2:" << val2 << endl << endl << endl;
}
void callbyreference(int &val1,int &val2)
{
int temp;
temp = val1;
val1 = val2;
val2 = temp;
cout<<"swap data val1:" << val1 << " val2:" << val2 << endl << endl << endl;
}
int main()
{
int value1 = 50;
int value2 = 100;
cout<<"before callbyvalue value1:" << value1 << " value2:" << value2 << endl << endl << endl;
callbyvalue(value1,value2);//함수 호출 후 매개변수에 넣었던 변수들이 변하지 않음
cout<<"after callbyvalue value1:" << value1 << " value2:" << value2 << endl << endl << endl;
cout<<"before callbyreference value1:" << value1 << " value2:" << value2 << endl << endl << endl;
callbyreference(value1,value2);//함수 호출 후 매개변수에 넣었던 변수 변함
cout<<"after callbyreference call!! value1:" << value1 << " value2:" << value2 << endl << endl << endl;
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
위의 코드를 보시면 callbyvalue 함수는 일반 적인 변수를 매개변수로 담아서 데이터를 변경시키게끔 코딩을 하였고
callbyreference 함수에는 참조형 변수를 담아서 데이터를 변경 시키게끔 코딩을 하였습니다.
위에 실행 결과를 보겠습니다. callbyvalue라는 함수를 호출하기전에는 value1 값이 50 value2값이 100 인것을
확인할수 있습니다.
그리고 callbyvalue라는 함수를 호출해서 데이터를 상호 변경 즉 swap을 시켜주고 다시 함수 밖에서
callbyvalue 후에 로그를 찍어 보니 value1값은 그래도 50 value2값도 그대로 100인것을 확인 할수 있습니다.
이번에는 callbyreference 함수를 호출 하기전의 로그를 봅니다.
callbyreference함수를 호출하기전에는 value1 값이 50 value2값이 100 인것을 확인할수 있습니다.
그리고 callbyreference라는 함수를 호출해서 데이터를 상호 변경 즉 swap을 시켜주고 다시 함수 밖에서
callbyreference후에 로그를 찍어 보니 value1값이 100으로 value2값이 50으로 바뀌는 것을 볼수 있습니다.
이런것처럼 매개변수에 참조형 변수를 넣어서 호출했던 위치의 변수가 바뀌는 것이 callbyreference입니다.
callbyreference는 실무에서 많이 쓰이는 표현입니다.
실무에 들어가게 되면 함수이름을 그 함수가 하는 기능을 함수명으로 하는 경우가 많습닏니다.
그래야 코드의 가독성이 높아져서 다른 사람이 봤을때도 함수이름만 보고 이 함수가 어떤 역활을 하는지
알수 있기 때문입니다.
그래서 어떠한 기능을 하는 함수를 만들어서 매개변수에 변수만 넣으면 그 기능이 동작해서 값을 가져오게 하는
함수를 만들때 callbyreference를 많이 이용합니다.
예를들어 어떠한 A라는 개발자와 B라는 개발자가 어떠한 프로젝트를 같이 개발하고 있다고 과정을 해보겠습니다.
그 프로젝트는 현재 인터넷이 연결되어있는지 안되어있는지의 상태값을 받아와야 하는데
이상태값은 여러가지 계산에 의해서 판단이 가능한 부분이라면 상태값을 가져오는 로직을 하나 만들고
참조형 매개변수로 인터넷 연결여부 상태값을 넣어주어서 함수하나만 호출해서 매개변수만 넣어주어도
상태값을 알수있게 되는 함수가 됩니다.
그래서 A라는 개발자와 B라는 개발자가 인터넷 연결 상태값을 받아오는 로직을 구지 알고있지 않아도
함수 명이나 함수 설명만 보고 매개변수를 넣어서 인터넷 연결 상태값을 받아올수 있는것이 장점입니다.
그렇기 때문에 여러 사람들이 써야하는데 로직은 그대로나 값이 변해야하는 상황일때 많이 쓰는 표현 중에 하나입니다.
여기 까지 신입 개발자의 기본인 callbyreference와 callbyvalue에 대해서 코드 적으로 설명 드렸습니다.
다음 시간는 변수명 설정 법 및 함수 이름 설정 방법에 대해서 설명 드리겠습니다.
감사합니다.
'C++ > C++심화' 카테고리의 다른 글
[C++]6. vector 사용하기(구조체 vector사용 하기) (0) | 2019.07.14 |
---|---|
[C++]5. Enum값 사용하기 (0) | 2019.06.19 |
[C++] 4. null 과 nullptr의 차이점 (0) | 2019.06.09 |
[C++] 3. 변수 이름 및 함수 이름 코딩 룰에 맞게 설정하기(카멜 표기법,파스칼 표기법) (0) | 2019.06.08 |
[C++] 1. 초보개발자가 되기전 필요한 역량(신입 프로그래머의 역량,국비지원 교육과정 6개월 후 취업) (0) | 2019.06.07 |