본문 바로가기
IT이야기

4. PHP 함수 만들기: 기본부터 고급 개념까지

by kinderports 2024. 10. 12.
반응형

 

PHP 함수 만들기: 기본부터 고급 개념까지

PHP에서 함수는 코드의 재사용성을 높이고 프로그램을 구조화하는 데 필수적인 도구입니다. 함수는 특정 작업을 수행하는 코드를 묶어놓은 블록으로, 이를 정의하고 필요할 때마다 호출하여 사용할 수 있습니다. 이번 포스팅에서는 PHP 함수의 기본 사용법부터 고급 개념까지 차근차근 살펴보고, 실전에서 자주 사용되는 함수의 다양한 활용법을 예제와 함께 설명합니다.

목차

  1. PHP 함수란 무엇인가?
  2. PHP 함수 정의와 호출
  3. 매개변수와 반환값
  4. 기본값 매개변수 사용하기
  5. PHP에서의 가변 길이 인수
  6. PHP 익명 함수와 클로저
  7. 재귀 함수 사용법
  8. 함수와 스코프: 전역 변수와 지역 변수
  9. 함수 활용 팁과 주의사항

PHP 함수란 무엇인가?

함수는 특정 작업을 수행하는 코드 블록입니다. PHP에서 함수는 여러 번 호출할 수 있어 코드의 재사용성을 높여주며, 코드의 가독성과 유지보수성을 향상시킵니다. 함수를 사용하면 동일한 작업을 반복적으로 수행하는 코드를 일일이 작성할 필요가 없고, 필요한 경우 함수만 호출하면 되므로 코드의 길이를 줄일 수 있습니다.

함수는 기본적으로 입력(매개변수)을 받아서, 어떤 작업을 수행하고, 그 결과를 반환하는 구조로 동작합니다.

PHP 함수 정의와 호출

PHP에서 함수를 정의하려면 function 키워드를 사용합니다. 함수 정의는 한 번만 하면 되며, 필요할 때마다 호출하여 사용할 수 있습니다.

함수 정의 형식

 

<?php
function 함수이름() {
    // 실행할 코드
}
?>

함수 호출

함수를 정의한 후에는 함수 이름을 사용해 호출할 수 있습니다. 함수를 호출할 때는 함수 이름 뒤에 괄호 ()를 붙여야 합니다.

 

<?php
function sayHello() {
    echo "Hello, World!";
}

sayHello();  // 함수 호출
?>

위의 예제에서는 sayHello라는 함수를 정의하고, 이 함수를 호출하면 "Hello, World!"라는 메시지가 출력됩니다.

매개변수와 반환값

함수는 외부에서 데이터를 입력받아 그 데이터를 처리하고 결과를 반환할 수 있습니다. 이때 함수의 입력값을 매개변수라고 하며, 함수가 처리한 결과를 반환하는 값을 반환값이라고 합니다.

매개변수 사용하기

매개변수를 사용하면 함수가 외부에서 제공받은 데이터를 처리할 수 있습니다. 함수 정의 시 매개변수를 괄호 안에 지정합니다.

 

<?php
function greet($name) {
    echo "안녕하세요, $name!";
}

greet("철수");  // 출력: 안녕하세요, 철수!
greet("영희");  // 출력: 안녕하세요, 영희!
?>

위 예제에서 greet 함수는 $name이라는 매개변수를 받아 그 값을 출력하는 역할을 합니다. 함수 호출 시 매개변수에 원하는 값을 전달할 수 있습니다.

반환값 사용하기

함수는 return 키워드를 사용하여 값을 반환할 수 있습니다. 반환값은 함수 호출 부분으로 전달되어 이후에 사용할 수 있습니다.

 

<?php
function add($a, $b) {
    return $a + $b;
}

$result = add(3, 5);
echo $result;  // 출력: 8
?>

이 예제에서는 add 함수가 두 매개변수의 합을 반환하고, 그 결과를 $result 변수에 저장합니다.

기본값 매개변수 사용하기

함수에 매개변수를 전달하지 않았을 때 기본값을 사용하도록 설정할 수 있습니다. 기본값 매개변수는 함수 호출 시 해당 값을 전달하지 않으면, 지정된 기본값이 사용됩니다.

 

<?php
function greet($name = "손님") {
    echo "안녕하세요, $name!";
}

greet();          // 출력: 안녕하세요, 손님!
greet("철수");    // 출력: 안녕하세요, 철수!
?>

위 예제에서 greet 함수는 매개변수를 전달하지 않으면 "손님"이라는 기본값을 사용합니다. 기본값은 함수 선언 시 =을 사용해 설정할 수 있습니다.

PHP에서의 가변 길이 인수

함수에 전달하는 인수의 개수가 정해지지 않은 경우, 가변 길이 인수를 사용할 수 있습니다. PHP에서는 가변 길이 인수를 처리하기 위해 ... (전개 연산자)를 사용합니다.

 

<?php
function sum(...$numbers) {
    $total = 0;
    foreach ($numbers as $num) {
        $total += $num;
    }
    return $total;
}

echo sum(1, 2, 3);         // 출력: 6
echo sum(1, 2, 3, 4, 5);   // 출력: 15
?>

이 예제에서 sum 함수는 가변 개수의 매개변수를 받아들여 그 합을 계산합니다. 함수 호출 시 몇 개의 인수를 넘기든 상관없이 처리할 수 있습니다.

PHP 익명 함수와 클로저

PHP에서는 익명 함수를 사용해 이름 없는 함수를 정의할 수 있습니다. 익명 함수는 주로 일회성으로 사용되거나, 콜백 함수로 전달될 때 유용하게 사용됩니다. PHP 5.3 이후부터 클로저(Closure)도 지원하며, 클로저는 외부 변수에 접근할 수 있는 익명 함수입니다.

 

<?php
$greet = function($name) {
    echo "안녕하세요, $name!";
};

$greet("철수");  // 출력: 안녕하세요, 철수!
?>

익명 함수는 변수에 저장되거나 함수 인수로 전달될 수 있습니다.

클로저 사용하기

클로저는 함수 외부의 변수를 함수 내부에서 사용할 수 있게 해주는 익명 함수입니다. use 키워드를 사용해 외부 변수를 클로저에 전달합니다.

 

<?php
$message = "안녕하세요";

$greet = function($name) use ($message) {
    echo "$message, $name!";
};

$greet("철수");  // 출력: 안녕하세요, 철수!
?>

이 예제에서 함수 외부에 선언된 $message 변수를 use를 통해 익명 함수 내부에서 사용하고 있습니다.

재귀 함수 사용법

재귀 함수는 자기 자신을 호출하는 함수입니다. 주로 복잡한 문제를 단순화하거나, 트리 구조와 같은 자료 구조를 처리할 때 유용합니다. 다만, 재귀 함수는 종료 조건이 반드시 필요합니다. 그렇지 않으면 무한히 자신을 호출하는 문제가 발생할 수 있습니다.

재귀 함수 예시: 팩토리얼 계산

 

<?php
function factorial($n) {
    if ($n === 0) {
        return 1;
    } else {
        return $n * factorial($n - 1);
    }
}

echo factorial(5);  // 출력: 120
?>

이 함수는 입력된 숫자 $n의 팩토리얼을 계산하는 재귀 함수입니다. $n이 0이 될 때까지 계속해서 자신을 호출하며, 종료 조건을 만나면 재귀 호출이 끝나고 결과가 반환됩니다.

함수와 스코프: 전역 변수와 지역 변수

PHP에서 변수의 스코프(scope)는 변수가 어디에서 사용될 수 있는지를 정의합니다. 함수 내부에서 선언된 변수는 지역 변수로, 함수 외부에서는 접근할 수 없습니다. 반대로 함수 외부에서 선언된 변수는 전역 변수로, 함수 내부에서 접근하려면 global 키워드를 사용해야 합니다.

 

<?php
$globalVar = "전역 변수";

function test() {
    global $globalVar;
    echo $globalVar;  // 출력: 전역 변수
}

test();
?>

이 예제에서는 global 키워드를 사용하여 함수 내부에서 전역 변수를 접근하고 있습니다. 전역 변수를 많이 사용하는 것은 유지보수에 좋지 않기 때문에, 되도록이면 지역 변수를 사용하는 것이 좋습니다.

함수 활용 팁과 주의사항

PHP에서 함수를 사용할 때는 몇 가지 주의사항과 팁을 기억해두는

것이 좋습니다:

  1. 함수는 항상 하나의 작업을 수행하도록 설계하는 것이 좋습니다. 여러 작업을 한꺼번에 수행하는 함수는 복잡해지고, 유지보수가 어려워질 수 있습니다.
  2. 함수명은 명확하게 지어야 합니다. 함수가 어떤 일을 하는지 이름에서 바로 알 수 있도록 작명하는 것이 바람직합니다.
  3. 전역 변수 남용은 피하세요. 함수 내부에서 외부 데이터를 참조해야 할 때는 매개변수를 사용해 데이터를 전달하는 것이 좋습니다.
  4. 함수는 재사용성을 고려해 설계하세요. 다양한 상황에서 사용할 수 있는 범용적인 함수는 코드의 재사용성을 극대화할 수 있습니다.
  5. 재귀 함수를 사용할 때는 반드시 종료 조건을 설정해 무한 루프에 빠지지 않도록 주의해야 합니다.