Menu
Coddy logo textTech

참조에 의한 전달

Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 7번째.

기본적으로 PHP에서 함수로 변수를 전달할 때, 함수는 해당 변수 값의 복사본을 받습니다. 이는 함수 내부에서 발생한 어떠한 변경 사항도 함수 외부의 원래 변수에는 영향을 주지 않음을 의미합니다.

하지만 때로는 함수가 원래 변수를 직접 수정하도록 하고 싶을 때가 있습니다. 이럴 때 참조에 의한 전달(passing by reference)이 사용됩니다. 함수 정의에서 매개변수 이름 앞에 앰퍼샌드(&)를 추가함으로써, PHP에 복사본 대신 실제 변수를 전달하도록 지시할 수 있습니다:

<?php
function doubleValue(&$number) {
    $number = $number * 2;
}

$value = 10;
doubleValue($value);
echo $value;  // 출력: 20
?>

함수에서 아무것도 반환하지 않았음에도 불구하고 $value가 10에서 20으로 어떻게 변경되었는지 확인해 보세요. &$number 매개변수는 원래의 $value 변수에 대한 직접적인 링크를 생성하여, 함수가 이를 직접 수정할 수 있도록 합니다.

이 기술은 함수가 여러 변수를 수정해야 하거나, 복사가 비효율적일 수 있는 대규모 데이터 구조를 다룰 때 특히 유용합니다.

quiz icon실력 점검

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

quiz icon실력 점검

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

quiz icon실력 점검

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

challenge icon

챌린지

쉬움

세 개의 매개변수(수량 변수에 대한 참조, 추가할 양, 제거할 양)를 받는 updateInventory라는 함수를 생성하세요. 이 함수는 첫 번째 양을 더하고 두 번째 양을 빼서 원래의 수량을 수정해야 합니다.

초기 수량, 추가할 양, 제거할 양의 세 가지 입력을 받게 됩니다. 세 입력을 모두 읽고, 초기 수량으로 변수를 생성한 다음, 수량을 참조(reference)로 전달하고 추가 및 제거할 양과 함께 updateInventory 함수를 호출한 후, 업데이트된 수량을 출력하세요.

입력 형식: 세 줄 - 첫 번째 줄은 초기 수량(숫자), 두 번째 줄은 추가할 양(숫자), 세 번째 줄은 제거할 양(숫자)을 포함합니다.

예상 출력: 추가 및 제거 후의 업데이트된 수량

치트 시트

기본적으로 PHP는 변수를 함수에 값으로 전달합니다(복사본). 원본 변수를 수정하려면 매개변수 이름 앞에 앰퍼샌드(&)를 추가하여 참조에 의한 전달(pass by reference)을 사용하세요:

<?php
function doubleValue(&$number) {
    $number = $number * 2;
}

$value = 10;
doubleValue($value);
echo $value;  // Outputs: 20
?>

&$number 매개변수는 원본 변수에 대한 직접적인 링크를 생성하여, 함수가 값을 반환하지 않고도 원본을 수정할 수 있게 합니다. 이는 여러 변수를 수정하거나 대규모 데이터 구조를 효율적으로 작업할 때 유용합니다.

직접 해보기

<?php
// 입력 읽기
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// 수량 변수 생성
$quantity = $initialQuantity;

// TODO: 여기에 참조 매개변수를 받는 updateInventory 함수를 생성하세요

// TODO: 참조를 통해 수량과 함께 updateInventory 함수를 호출하세요

// 업데이트된 수량 출력
echo $quantity;
?>
quiz icon실력 점검

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

논리 & 흐름의 모든 레슨