Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 익명 함수 완벽 가이드 – 클로저와 콜백 활용법

PHP 익명 함수란?

익명 함수(Anonymous Function)는 사용자가 별도의 이름을 정의하지 않는 함수입니다. 이러한 함수는 클로저(Closure) 또는 람다(Lambda) 함수라고도 불립니다. 한 번만 사용할 목적의 함수가 필요할 때 특히 유용하며, 클로저는 자신이 정의된 환경(스코프)을 기억하는 익명 함수로서 use 키워드를 통해 외부 변수에 접근할 수 있습니다. 익명 함수의 가장 대표적인 용도는 인라인 콜백 함수를 만드는 것입니다.

기본 문법

$var = function ($arg1, $arg2) { return $val; };
  • 함수 이름 없음: function 키워드와 여는 괄호 사이에 함수 이름이 존재하지 않습니다.
  • 세미콜론 필수: 익명 함수 정의는 하나의 표현식(expression)이므로 정의 끝에 반드시 세미콜론(;)을 붙여야 합니다.
  • 변수에 할당 후 호출: 함수를 변수에 담아두었다가, 나중에 변수 이름으로 호출합니다.
  • 콜백(Callback): 다른 함수의 인수로 전달되어 그 함수 내부에서 나중에 호출되는 경우 콜백이라고 부릅니다.
  • 클로저(Closure): 외부 함수 안에서 익명 함수를 반환하면, 그 익명 함수가 외부 함수의 변수에 접근할 수 있으며 이를 클로저라고 합니다.

익명 함수 기본 예제

다음 예제는 숫자의 세제곱을 구하는 익명 함수를 변수에 할당한 뒤 호출하는 코드입니다.

<?php
$var = function ($x) {return pow($x,3);};
echo "cube of 3 = " . $var(3);
?>

위 코드를 실행하면 아래와 같은 결과가 출력됩니다.

cube of 3 = 27

콜백으로 활용하기

다음 예제에서는 PHP 내장 함수인 usort()의 인수로 익명 함수를 전달합니다. usort() 함수는 사용자가 정의한 비교 함수를 기준으로 주어진 배열을 정렬해 줍니다.

<?php
$arr = [10,3,70,21,54];
usort ($arr, function ($x , $y) {
    return $x > $y;
});
foreach ($arr as $x){
    echo $x . " ";
}
?>

위 코드를 실행하면 배열 요소가 오름차순으로 정렬되어 출력됩니다.

3
10
21
54
70

클로저로 활용하기

클로저 역시 익명 함수의 일종으로, use 키워드를 사용하면 자신의 스코프 바깥에 있는 변수에 접근할 수 있습니다. 아래 예제에서는 외부 변수 $maxmarks(총점)를 익명 함수 내부에서 활용하여 백분율을 계산합니다.

<?php
$maxmarks=300;
$percent=function ($marks) use ($maxmarks) {return $marks*100/$maxmarks;};
echo "marks=285 percentage=". $percent(285);
?>

위 코드를 실행하면 아래와 같은 결과가 출력됩니다.

marks=285 percentage=95

참고: 화살표 함수(PHP 7.4 이상)

PHP 7.4부터는 화살표 함수(Arrow Function) 문법이 도입되어 클로저를 더욱 간결하게 작성할 수 있습니다. 화살표 함수는 외부 변수를 자동으로 값으로 캡처하므로 use 키워드가 필요 없습니다.

$percent = fn($marks) => $marks * 100 / $maxmarks;

또한 모든 클로저는 PHP 내부적으로 Closure 클래스의 인스턴스로 처리되므로, 필요에 따라 객체처럼 다룰 수 있다는 점도 함께 기억해 두면 좋습니다.