참조에 의한 전달
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 41번째.
함수에 인수를 전달할 때, C++는 보통 값의 복사본을 생성합니다. 이는 함수 내부에서의 변경 사항이 원래 변수에 영향을 미치지 않음을 의미합니다. 참조에 의한 전달(Pass by reference)은 함수가 원래 변수와 직접 작업할 수 있게 함으로써 이 동작을 변경합니다.
참조에 의한 전달(pass by reference)을 하려면, 함수 선언의 매개변수 타입 뒤에 & 기호를 추가하세요:
void doubleValue(int& number) {
number = number * 2; // 원본 변수를 수정합니다
}이 함수를 호출할 때, 함수 내부에서 매개변수에 가해진 모든 변경 사항은 전달된 원래 변수를 직접 수정하게 됩니다. 이는 함수가 인수를 수정하도록 하거나, 복사가 비효율적일 수 있는 큰 객체를 다룰 때 특히 유용합니다.
참조에 의한 전달(Pass by reference)은 데이터 복사의 오버헤드를 제거하여, 특히 vectors나 maps와 같은 복잡한 데이터 구조를 다룰 때 프로그램을 더 빠르고 메모리 효율적으로 만들어 줍니다.
챌린지
쉬움함수 매개변수를 통해 변수를 직접 수정함으로써 참조에 의한 전달(pass by reference)을 보여주는 함수를 만드세요. 이 챌린지는 & 기호가 함수가 복사본 대신 원본 변수를 사용하여 작업할 수 있게 하는 방식을 이해하고 있는지 테스트합니다.
다음 입력값이 제공됩니다:
- 첫 번째 숫자를 나타내는 정수
value1 - 두 번째 숫자를 나타내는 정수
value2 - 세 번째 숫자를 나타내는 정수
value3
프로그램은 다음을 수행해야 합니다:
- 세 개의 정수 매개변수를 참조로 받는
tripleValues라는 이름의 함수를 만듭니다. - 함수 내부에서 각 매개변수에 3을 곱합니다.
- 메인 함수에서 세 개의 입력값을 읽어 변수에 저장합니다.
- 함수를 호출하기 전에 원본 값을 출력합니다.
- 세 개의 변수를 사용하여
tripleValues함수를 호출합니다. - 함수 호출 후 수정된 값을 출력하여 값이 변경되었음을 보여줍니다.
다음과 같은 정확한 출력 형식을 사용하세요:
함수 호출 전:
Original values: [value1] [value2] [value3]함수 호출 후:
Tripled values: [new_value1] [new_value2] [new_value3]함수 시그니처는 참조에 의한 전달을 나타내기 위해 각 매개변수 타입 뒤에 & 기호를 사용해야 합니다: void tripleValues(int& a, int& b, int& c). 이를 통해 함수는 전달된 원본 변수를 직접 수정할 수 있으며, 이는 값에 의한 전달(pass by value)과 참조에 의한 전달 사이의 핵심적인 차이점을 보여줍니다. 메인 함수의 변수들은 함수 호출 후 영구적으로 변경되며, 이는 함수가 복사본이 아닌 원본 메모리 위치에서 작업했음을 증명합니다.
치트 시트
C++에서 참조에 의한 전달(pass by reference)을 하려면, 함수 선언의 매개변수 타입 뒤에 & 기호를 추가하세요:
void doubleValue(int& number) {
number = number * 2; // 원본 변수를 수정합니다
}참조에 의한 전달을 사용하면 함수가 복사본 대신 원본 변수를 직접 다룰 수 있습니다. 함수 내부에서 매개변수에 가해진 변경 사항은 전달된 원본 변수를 수정하게 됩니다.
이는 데이터 복사로 인한 오버헤드를 제거하여 프로그램을 더 빠르고 메모리 효율적으로 만듭니다. 특히 vector나 map과 같은 복잡한 데이터 구조에서 더욱 효과적입니다.
직접 해보기
#include <iostream>
using namespace std;
// TODO: 여기에 tripleValues 함수를 만드세요
int main() {
// 입력값 읽기
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// 원본 값 출력
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO: 여기에 tripleValues 함수를 호출하세요
// 수정된 값 출력
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.