Menu
Coddy logo textTech

값에 의한 전달

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 25번째.

C 언어에서 함수로 변수를 전달할 때, 함수는 변수 자체가 아니라 그 변수 값의 복사본을 받습니다. 이 근본적인 개념을 값에 의한 전달(pass-by-value)이라고 합니다.

다음과 같은 일이 일어납니다: 값이 10인 변수 x가 있고 이를 함수에 전달하면, 함수는 해당 값의 별도 복사본을 갖게 됩니다. 함수가 이 복사본에 가하는 어떠한 변경 사항도 호출한 함수에 있는 원래 변수에는 영향을 미치지 않습니다.

void tryToChange(int num) {
    num = 99;  // 이것은 복사본만 변경합니다
}

int main() {
    int x = 10;
    tryToChange(x);
    // x는 여전히 10이며, 99가 아닙니다
    return 0;
}

이 동작은 함수에 의해 원본 데이터가 실수로 수정되는 것을 방지합니다. 하지만, 이는 함수가 실제로 변수의 값을 변경하기를 원한다면 값에 의한 전달(pass-by-value) 방식으로는 작동하지 않는다는 것을 의미하기도 합니다. 포인터와 포인터가 이 문제를 어떻게 해결할 수 있는지 배우는 과정에서 이러한 제약 사항을 이해하는 것은 매우 중요합니다.

challenge icon

챌린지

쉬움

함수 내부에서 변수를 수정하려고 시도하고 원본 변수가 변경되지 않은 상태로 유지되는 것을 관찰함으로써 값에 의한 전달(pass-by-value) 개념을 보여주는 C 프로그램을 작성하세요.

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

  1. number라는 정수 매개변수를 받는 tryToModify라는 이름의 함수를 만듭니다.
  2. tryToModify 함수 내부에서 number 매개변수에 50을 더합니다.
  3. tryToModify 함수 내부에서 수정된 값을 Inside function: [value] 형식으로 출력합니다.
  4. main 함수에서 original이라는 이름의 정수 변수를 선언하고 25라는 값으로 초기화합니다.
  5. 함수를 호출하기 전에 원본 값을 Before function call: [value] 형식으로 출력합니다.
  6. tryToModify 함수를 호출하고 original 변수를 인수로 전달합니다.
  7. 함수 호출 후, original의 값을 다시 After function call: [value] 형식으로 출력합니다.

출력 결과는 함수 내부의 수정에도 불구하고 원본 변수의 값이 변경되지 않은 상태로 유지됨을 보여주어야 합니다:

Before function call: 25
Inside function: 75
After function call: 25

이 챌린지는 함수가 변수 자체가 아니라 변수의 복사본을 받는 C 언어의 값에 의한 전달(pass-by-value)이라는 기본 개념을 보여줍니다. 함수 내부에서 매개변수에 가해진 모든 수정 사항은 호출한 함수의 원본 변수에 영향을 미치지 않습니다.

치트 시트

C 언어에서 함수는 변수 자체가 아니라 변수 값의 복사본을 전달받습니다. 이를 값에 의한 전달(pass-by-value)이라고 합니다.

변수를 함수에 전달할 때, 함수 내부에서 이루어진 모든 변경 사항은 복사본에만 영향을 미치며, 원래 변수는 변경되지 않은 상태로 유지됩니다:

void tryToChange(int num) {
    num = 99;  // 이 코드는 복사본만 변경합니다
}

int main() {
    int x = 10;
    tryToChange(x);
    // x는 여전히 10이며, 99가 아닙니다
    return 0;
}

이러한 동작은 함수에 의해 원본 데이터가 실수로 수정되는 것을 방지하지만, 함수가 실제로 변수의 값을 변경하도록 하려는 경우에는 값에 의한 전달 방식이 작동하지 않음을 의미합니다.

직접 해보기

#include <stdio.h>

// TODO: 여기에 tryToModify 함수를 작성하세요

int main() {
    // TODO: 여기에 코드를 작성하세요
    // 1. 원본 변수 선언 및 초기화
    // 2. 함수 호출 전의 값 출력
    // 3. tryToModify 함수 호출
    // 4. 함수 호출 후의 값 출력
    
    return 0;
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨