평생 배우는 개발자

참조 매개변수 본문

개발면접준비

참조 매개변수

개발지식 블로그 2025. 1. 10. 16:50

서론

함수를 호출할 때 매개변수를 지정한다. 이때 const나 &나 여러 가지 키워드들이 붙는 경우가 있다. 이에 대해서 자세히 알아보자

 

본론

&는 레퍼런스 즉 참조를 할때 붙이는 키워드이다. 기존에 정의된 어떠한 변수에 해당 &를 붙이면 그 변수의 주솟값을 얻을 수 있었다.

하지만 우리가 함수를 부를때 매개변수로서 &를 쓰는 것은 그 쓰임새가 다르다.

&를 붙이면 해당 변수를 복사해서 넘기는 것이 아니라 해당 변수의 참조 즉 주소가 넘어가기 때문에 값을 복사해서 넘길 필요가 없으니 복사는 일어나지 않는다. 따라서 우리가 넘겨야 할 매개변수의 크기가 크다면 참조 매개변수로 넘기는 것이 메모리 측면에서 유리하다. 예를 들어

vector <int> vec(1000,0); 

 

functionA(vector <int> v);

위 벡터를 functionA 함수의 매개변수로 넘기면 1000개의 저장공간을 복사해서 해당 함수에 넘겨준다. 1000개만큼의 공간을 또 만들어야 하는 것이다.

 

functionB(vector <int>& v);

그러나 위 벡터를 functionB 함수의 참조 매개변수 형태로 넘기면 1000개의 공간을 한 번 더 복사하는 과정 없이 vec의 참조값만 넘기기 때문에 메모리 측면에서 유리하다. 또한, functionB의 함수에서 참조매개변수로 받은 v의 값을 수정하면 해당 함수가 끝난 후에 vec의 값이 똑같이 변경된다.

 

functionC(const vector<int>& v);

위 함수에 참조매개변수로 넘기면 어떤 일이 일어날까? 일단 참조값으로 매개변수를 넘겼기 때문에 복사가 일어나지 않아서 메모리 측면에서 유리한 점을 얻는다. 다음으로 const라는 키워드를 붙이면 읽기 전용으로 참조 매개변수를 넘겨준다는 의미가 된다. 따라서 이 함수에서 v의 값을 변경하려는 시도를 하면 오류가 나게 된다. 따라서 큰 공간을 가지는 container를 읽기 전용으로만 넘겨주고 싶을 때 해당 방법을 쓰면 된다.

 

마무리

위의 내용을 바탕으로 개발자 면접 간

1. 코딩테스트 중에 왜 참조 매개변수를 사용하였나요?

 

 

헷갈리는 부분은 보완하기! 찡긋 O. <

 

틀린 부분이나 보완해줬으면 하는 내용이 있으면 댓글로 알려주세요! 추가 설명이 필요하신 부분도 댓글로 알려주세요.

어떠한 피드백도 환영입니다. 긴 글 읽어주셔서 감사합니다