728x90
기술 면접 중 대표적으로 알아야할 내용들은 하나씩 정리해보고자 한다.
먼저 대표적으로 함수를 호출하는 방법이 2가지 존재한다.
함수에 정의한 매개변수의 형태에 따라 결정이 된다.
"Call by Value" : 값을 통한 호출
"Call by Reference" : 참조를 통한 호출
Call by Value
함수에서 값을 복사해서 전달하는 방식으로 인자로 전달되는 변수를 함수의 매개변수에 복사하는 것을 의미한다.
복사가 된 경우 인자로 전달된 변수와는 다른 변수로 된다. 매개변수를 변경하더라도 원래의 변수에는 영향을 미치지 않는다. 원본 값을 변경할 필요없을 경우 해당 방식을 사용하면 된다. But 원본의 내용을 복사 하기때문에 메모리의 사용량이 늘어난다.
대표적인 예로 선언된 변수를 Swap함수를 통해 인자로 받는 값을 변경하는 작업을 수행 후 확인 해보고자한다.
#include <iostream>
using namespace std;
void Swap(int x, int y)
{
int temp = x;
x = y;
y = temp;
}
int main()
{
int a = 10;
int b = 20;
Swap(a, b);
cout << "a의 결과 :" << a << endl;
cout << "b의 결과 :" << b << endl;
}
기대와는 다르게 두 변수의 값은 변경되지 않았다.
Call by Reference
인자의 값이 매개변수에 복사된다는 것은 Call by Value와 동일하다. 하지만 함수에서 값을 전달하는 방식이 아닌 주소값을 전달하는 방식임이 차이점이다. reference(참조하다)의 뜻 그대로 참조의 값으로 함수를 호출했다는 것을 의미한다.
매개변수를 포인터를 통해 주소에 접근하여 처리하는 속도가 빠르다.
예시를 통해 포인터를 사용하여 함수를 호출하여 작업를 수행 후 확인 해보았다.
#include <iostream>
using namespace std;
void Swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a = 10;
int b = 20;
Swap(&a, &b);
cout << "a의 결과 :" << a << endl;
cout << "b의 결과 :" << b << endl;
}
두 변수의 값이 Swap를 통해 변경이 된 것을 확인 할 수 있다.
728x90