📚 PHP 초급 - 5주차: 함수 - 02 매개변수 (기본값, 가변 인자)

2025. 6. 28. 17:09프로그램/PHP 초급

📚 PHP 초급 - 5주차: 함수 - 02 매개변수 (기본값, 가변 인자)

📚 PHP 초급 - 5주차: 함수 - 02 매개변수 (기본값, 가변 인자)

 

안녕하세요! #PHP 초급 강좌 5주차 두 번째 시간입니다. 지난 시간에는 #PHP #함수 의 기본적인 정의와 호출 방법에 대해 알아보았습니다. 이번 시간에는 함수를 더욱 유연하고 강력하게 만들어주는 매개변수의 고급 활용법, 특히 기본값 매개변수가변 인자에 대해 자세히 살펴보겠습니다.



1. 매개변수 기본값 (Default Parameter Values)

함수를 정의할 때 특정 #매개변수 에 #기본값 을 지정할 수 있습니다. 이렇게 하면 함수를 호출할 때 해당 매개변수에 값을 전달하지 않아도 미리 설정된 기본값이 자동으로 사용됩니다. 이는 함수 호출 시 인수를 생략할 수 있게 하여 코드를 더 간결하게 만들고, 유연성을 높여줍니다.

1.1. 기본값 설정 방법

매개변수 이름 뒤에 = 연산자와 기본값을 지정합니다.

PHP
 
<?php
function sendMessage($message, $recipient = "모든 사용자") {
    echo $recipient . "에게 메시지: " . $message . "<br>";
}

// 1. recipient에 값을 전달하지 않은 경우: 기본값 "모든 사용자"가 사용됩니다.
sendMessage("안녕하세요!");
// 출력: 모든 사용자에게 메시지: 안녕하세요!

echo "<br>";

// 2. recipient에 값을 전달한 경우: 전달된 값이 기본값을 덮어씁니다.
sendMessage("오늘 날씨가 좋네요.", "박영희");
// 출력: 박영희에게 메시지: 오늘 날씨가 좋네요.
?>



1.2. 기본값 매개변수의 위치

중요: 기본값을 가진 매개변수는 항상 기본값이 없는 매개변수 뒤에 위치해야 합니다. PHP는 함수 호출 시 전달된 인수를 왼쪽에서 오른쪽으로 매개변수에 할당하기 때문입니다.

PHP
 
<?php
// 올바른 예시: $param1은 필수, $param2는 선택 (기본값)
function correctOrder($param1, $param2 = "기본값") {
    echo "Param1: " . $param1 . ", Param2: " . $param2 . "<br>";
}

correctOrder("필수값"); // Param1: 필수값, Param2: 기본값
correctOrder("필수값", "새로운값"); // Param1: 필수값, Param2: 새로운값

echo "<br>";

// 잘못된 예시: Syntax Error 발생
// function wrongOrder($param1 = "기본값", $param2) {
//     echo "Param1: " . $param1 . ", Param2: " . $param2 . "<br>";
// }
// wrongOrder("값1", "값2"); // PHP Fatal error:  Required parameter $param2 follows optional parameter $param1
?>

잘못된 예시처럼 기본값이 있는 매개변수 뒤에 기본값이 없는 매개변수가 오면 PHP는 어떤 인수가 어떤 매개변수에 할당되어야 할지 알 수 없으므로 오류가 발생합니다.



2. 가변 인자 함수 (Variable-length Argument Lists)

때로는 함수가 받을 #인수 의 개수를 미리 알 수 없는 경우가 있습니다. 예를 들어, 여러 숫자의 합계를 계산하는 함수는 몇 개의 숫자가 전달될지 알 수 없습니다. #PHP 5.6부터는 ... (스플랫 연산자, Splat Operator)를 사용하여 함수가 #가변 인자 를 받을 수 있도록 정의할 수 있습니다.

 

2.1. 가변 인자 정의 방법

매개변수 이름 앞에 ...를 붙입니다. 이렇게 하면 전달된 모든 인수가 해당 매개변수 이름의 배열로 함수 내에서 접근 가능합니다.

PHP
 
<?php
function sumAll(...$numbers) { // ...$numbers는 배열 형태로 모든 인수를 받습니다.
    $total = 0;
    foreach ($numbers as $number) {
        $total += $number;
    }
    return $total;
}

echo "합계 1: " . sumAll(1, 2, 3) . "<br>";
// 출력: 합계 1: 6 (sumAll 함수 내부에서 $numbers는 [1, 2, 3] 배열이 됩니다.)

echo "합계 2: " . sumAll(10, 20, 30, 40, 50) . "<br>";
// 출력: 합계 2: 150 ($numbers는 [10, 20, 30, 40, 50] 배열이 됩니다.)

echo "합계 3: " . sumAll(5) . "<br>";
// 출력: 합계 3: 5 ($numbers는 [5] 배열이 됩니다.)

echo "합계 4: " . sumAll() . "<br>";
// 출력: 합계 4: 0 ($numbers는 빈 배열 []이 됩니다.)
?>



2.2. 가변 인자와 다른 매개변수의 조합

가변 인자는 다른 일반 매개변수와 함께 사용할 수 있습니다. 이 경우 가변 인자 매개변수는 항상 마지막에 위치해야 합니다.

PHP
 
<?php
function createPlaylist($playlistName, ...$songs) {
    echo "플레이리스트: " . $playlistName . "<br>";
    if (empty($songs)) {
        echo "이 플레이리스트에는 아직 노래가 없습니다.<br>";
    } else {
        echo "포함된 노래:<br>";
        foreach ($songs as $song) {
            echo "- " . $song . "<br>";
        }
    }
    echo "<br>";
}

createPlaylist("나의 즐겨찾기", "Dynamite", "Butter", "Permission to Dance");
// 출력:
// 플레이리스트: 나의 즐겨찾기
// 포함된 노래:
// - Dynamite
// - Butter
// - Permission to Dance

createPlaylist("휴식 음악");
// 출력:
// 플레이리스트: 휴식 음악
// 이 플레이리스트에는 아직 노래가 없습니다.
?>



2.3. 배열을 가변 인자로 전달하기

이미 배열로 존재하는 데이터를 가변 인자 함수에 전달할 때는 다시 ... 연산자를 사용하여 배열을 "펼쳐서(unpack)" 개별 인자로 전달할 수 있습니다.

PHP
 
<?php
$numbersToAdd = [100, 200, 300];
echo "배열 합계: " . sumAll(...$numbersToAdd) . "<br>";
// 출력: 배열 합계: 600
// sumAll(100, 200, 300)과 동일하게 작동합니다.
?>



결론

이번 #PHP 초급 강좌에서는 #함수 의 #매개변수 를 더욱 유연하게 활용하는 방법인 #기본값 매개변수와 #가변 인자에 대해 깊이 있게 알아보았습니다. 이 두 가지 기능은 함수를 더 강력하고 재사용 가능하게 만들어주며, 다양한 상황에 대응할 수 있는 유연한 코드를 작성하는 데 필수적입니다. 오늘 배운 내용을 바탕으로 실제 코드에 적용해보면서 숙달하시길 바랍니다.