본문 바로가기

Programming/C / C++

[C/C++] Call by Value & Call By Reference (값에 의한 호출, 참조에 의한 호출)

1. 값에의한 호출  

  : 값에 의한 호출은 Call By Value라고 불리우며, 인자로 넘기는 값을 복사해서 새로운 함수에 넘겨주는 방식으로 값의 복사에 의한 함수 호출을 의미합니다. 


 위의 예제는 Call by Value 예제와 결과값 입니다. Call by Value는 값을 복사해서 전달하기 때문에 원본의 값이 변경될 가능성이 없다는 특징을 가지고 있지만, 값을 넘겨 줄때마다 고비용 , 복사손실 문제가 발생하는 단점도 있습니다. 
 ※ Call by Value는 Pass by Value 라고 불리기도 합니다. 

2. 참조에 의한 호출   

  : 참조에 의한 호출은 Call by Reference라고 부르며, 주소 값을 인자로 전달하는 함수 호출을 말합니다. 아래 예제를 보시죠. (위와 거의 유사합니다.)


  위의 예제에서 알 수 있듯이 Call by Reference는 복사손실과 고비용 문제에서는 벗어났지만, 원본의 값의 변경이 일어 날 수 있다는 중대한 문제점을 안고 있는걸 볼 수 있습니다. 

 Call by Value 나 Call by Reference 둘다 문제점을 가지고 있는데요, Effective C++에서는 이거에 대한 개선점을 언급한 바가 있습니다. 바로 항목 20 에서 인데 그에 대한 설명은 아래 포스팅을 참조 해 주십시오.