closure는 익명 함수(이름이 없고 변수에 저장된 함수)입니다. callable은 PHP가 함수로 호출할 수 있는 모든 것입니다 — closure, 명명된 함수, 메서드, 또는 호출 가능한 객체. 이들은 함수형 스타일 프로그래밍, 콜백, 고차 함수를 가능하게 합니다.
closure (익명 함수)
= {
* ;
};
();
= * ;
();
closure는 저장하고 전달할 수 있는 익명 함수입니다. 화살표 함수(fn)는 외부 변수를 자동으로 캡처하는 간결한 형태입니다.
$factor = 10;
// 전통적 closure — `use`로 변수를 명시적으로 가져와야 함
$multiply = function (int $x) use ($factor): int {
return $x * $factor; // $factor를 값으로 캡처
};
// 화살표 함수 — 외부 변수를 자동으로 캡처 (`use` 불필요)
$multiply = fn(int $x): int => $x * $factor;
핵심 차이: 전통적 closure는 외부 변수를 캡처하기 위해 명시적 use 절이 필요한 반면, 화살표 함수는 이를 자동으로 캡처합니다 — 짧은 콜백에 주요한 편의입니다.
// 이들은 모두 callable이며, 콜백으로 사용 가능:
'strlen' // 함수를 명명하는 문자열
[$object, 'methodName'] // [객체, 메서드] 배열
['ClassName', 'staticMethod'] // [클래스, 정적 메서드]
fn($x) => $x * 2 // closure/화살표 함수
$invokableObject // __invoke()를 가진 객체
// 고차 함수와 함께 사용:
array_map(fn($x) => $x * 2, [1, 2, 3]); // [2, 4, 6]
array_filter($users, fn($u) => $u->isActive()); // 필터
usort($items, fn($a, $b) => $a->price <=> $b->price); // 사용자 정의 정렬
callable은 모든 callable을 받는 매개변수의 타입 힌트입니다 — 고차 함수(함수를 받는 함수)를 가능하게 하며, array_map/array_filter/usort와 콜백 기반 API의 기반입니다.
closure와 callable은 함수형 스타일 프로그래밍, 콜백, 고차 함수를 가능하게 하는 중요한 PHP 기능입니다 — 현대 PHP에서 끊임없이 사용되는 패턴입니다.
closure(변수에 저장된 익명 함수)와 특히 화살표 함수(fn, 명시적 use 절이 필요한 전통적 closure와 달리 외부 변수를 자동 캡처)를 이해하는 것은 일상 지식입니다. 이들은 배열 함수(array_map/array_filter/array_reduce), 사용자 정의 정렬(usort), 이벤트 핸들러, 콜백 기반 API에 전달되는 짧은 인라인 함수를 작성하는 자연스러운 방법이기 때문입니다.
무엇이 callable로 간주되는지(명명된 함수, 메서드, 정적 메서드, closure, 호출 가능한 객체)와 고차 함수가 이들을 어떻게 받는지를 아는 것은 깔끔하고 함수형 스타일의 PHP를 작성하고, 콜백을 받는 많은 프레임워크 및 표준 라이브러리 API(라우트 핸들러, 컬렉션 메서드, 미들웨어)를 사용하는 관건입니다.
closure와 callable은 표현력 있는 현대 PHP에 기초적입니다 — 데이터 변환, 필터링, 정렬, 콜백 패턴을 간결하고 읽기 쉽게 만듭니다 — 그래서 이를 숙달하는 것, 특히 편리한 화살표 함수 구문과 use-vs-자동 캡처 구분은 생산적인 PHP 개발을 위한 실용적이고 자주 적용되는 지식입니다.