이 포스팅은 Object Oriented Programming 시리즈 23 편 중 7 번째 글 입니다.

  • Part 1 - 01: Introduction
  • Part 2 - 02: Identifier, Variable, constant, Std IO, Operator
  • Part 3 - 03: Functions #1 - Calling (호출)
  • Part 4 - 04: Functions #2 - Local, Global Variable
  • Part 5 - 05: Functions #3 - Recursion Function, Reference Variable (재귀함수)
  • Part 6 - 06: Functions #4 - Reference Variable vs. Pointer
  • Part 7 - This Post
  • Part 8 - 08: Selection and Repetition
  • Part 9 - 09: File Input & Output (파일입출력)
  • Part 10 - 10: String library, rand(), srand()
  • Part 11 - 11: Pointer, Function Pointer
  • Part 12 - 12: Array, Vector (정적배열, 동적배열)
  • Part 13 - 13: class, object
  • Part 14 - 14: this, operator overloading
  • Part 15 - 15: friend, static, destructor
  • Part 16 - 16: Inherence (상속)
  • Part 17 - 17: Static Binding, Dynamic Binding, Header File
  • Part 18 - 18: Generic Programming, Template
  • Part 19 - 19: List Container
  • Part 20 - 20: Iterator (반복자)
  • Part 21 - 21: algorithm Library
  • Part 22 - 21: functional, lambda function
  • Part 23 - 22: Exception handling
▼ 목록 보기

목차

▼ 내리기

참조변수와 일반변수의 사용의 차이점을 알았다면, main 함수가 동작하는 도중 다른 함수를 호출할때, 그 함수의 인자 역시 두 종류가 있음을 알 수 있다. 마찬가지로 일반변수와, 참조변수를 사용할 수 있다.

두 변수의 값을 바꾸는 함수 swap 을 main 함수에서 호출하는 상황을 가정하고 비교해보자.

Swap_callbyValue

#include <iostream>

using namespace std;

int swap(int a, int b){
    int temp = a;
    a = b;
    b = temp;

    return 0;
}

int main(){
    int x = 5, y = 10;
    cout << "x = " << x << ", y = " << y << endl;
    swap(x, y);
    cout << "x = " << x << ", y = " << y << endl;

    return 0;
}
출력
// x = 5, y = 10
// x = 5, y = 10

왜 같은 값이 출력될까?

main 함수에서 swap 함수를 호출했을 때, x , y 값이 swap 함수에 들어가고, 이 값은 각각 a , b복사 된다. 따라서 swap 함수 안에서는 복사된 a, b 안에 들어간 값이 서로 바뀌게 되고, swap 함수가 종료된 후에 이 값은 사라진다. **결국 내가 원한 결과인 x , y 는 바뀌지 않는게 당연하다. 이렇게 값이 복사되어 함수를 호출하는 것을 **callbyvalue 라 한다.

Swap_callbyReference

#include <iostream>

using namespace std;

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

    return 0;
}

int main(){
    int x = 5, y = 10;
    cout << "x = " << x << ", y = " << y << endl;
    swap(x, y);
    cout << "x = " << x << ", y = " << y << endl;

    return 0;
}
출력
// x = 5, y = 10
// x = 10, y = 5

이렇게 할 경우, swap 함수를 호출한 뒤에 안에 들어갈 때, &a = x , &b = y 이런식으로 들어가기 때문에 abx , y 자체를 가리킨다. 따라서 내가 원하는 결과인 x , y 의 값이 바뀌게 된다. 이렇게 실제값을 가지고 함수를 호출하는 것을 callbyreference 라 한다.