Menu
Coddy logo textTech

참조에 의한 전달

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 41번째.

함수에 인수를 전달할 때, C++는 보통 값의 복사본을 생성합니다. 이는 함수 내부에서의 변경 사항이 원래 변수에 영향을 미치지 않음을 의미합니다. 참조에 의한 전달(Pass by reference)은 함수가 원래 변수와 직접 작업할 수 있게 함으로써 이 동작을 변경합니다.

참조에 의한 전달(pass by reference)을 하려면, 함수 선언의 매개변수 타입 뒤에 & 기호를 추가하세요:

void doubleValue(int& number) {
    number = number * 2;  // 원본 변수를 수정합니다
}

이 함수를 호출할 때, 함수 내부에서 매개변수에 가해진 모든 변경 사항은 전달된 원래 변수를 직접 수정하게 됩니다. 이는 함수가 인수를 수정하도록 하거나, 복사가 비효율적일 수 있는 큰 객체를 다룰 때 특히 유용합니다.

참조에 의한 전달(Pass by reference)은 데이터 복사의 오버헤드를 제거하여, 특히 vectors나 maps와 같은 복잡한 데이터 구조를 다룰 때 프로그램을 더 빠르고 메모리 효율적으로 만들어 줍니다.

challenge icon

챌린지

쉬움

함수 매개변수를 통해 변수를 직접 수정함으로써 참조에 의한 전달(pass by reference)을 보여주는 함수를 만드세요. 이 챌린지는 & 기호가 함수가 복사본 대신 원본 변수를 사용하여 작업할 수 있게 하는 방식을 이해하고 있는지 테스트합니다.

다음 입력값이 제공됩니다:

  • 첫 번째 숫자를 나타내는 정수 value1
  • 두 번째 숫자를 나타내는 정수 value2
  • 세 번째 숫자를 나타내는 정수 value3

프로그램은 다음을 수행해야 합니다:

  1. 세 개의 정수 매개변수를 참조로 받는 tripleValues라는 이름의 함수를 만듭니다.
  2. 함수 내부에서 각 매개변수에 3을 곱합니다.
  3. 메인 함수에서 세 개의 입력값을 읽어 변수에 저장합니다.
  4. 함수를 호출하기 전에 원본 값을 출력합니다.
  5. 세 개의 변수를 사용하여 tripleValues 함수를 호출합니다.
  6. 함수 호출 후 수정된 값을 출력하여 값이 변경되었음을 보여줍니다.

다음과 같은 정확한 출력 형식을 사용하세요:

함수 호출 전:

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;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직과 흐름의 모든 레슨