Page tree

자바 스크립트를 하신 독자분들은 클로저라는 단어가 익숙하실 겁니다.

익명 함수(Anonymous function)는 말 그대로 함수의 이름이 없는 함수로 클로저(Closure) 또는 콜백(Callback) 이라고도 부르며 PHP 5.3 부터 추가된 기능이며 5.4 에서 기능이 보강되었습니다.


라라벨에서는 익명 함수대신 클로저 또는 콜백이라는 용어를 사용하므로 이 책에서도 두 가지 용어를 병행하여 사용하겠습니다.


클로저는 다음과 같이 function 키워드와 전달할 변수명을 정해서 작성하면 되며 익명 함수이므로 function 이름은 주지 않습니다.

function ($name, $age) {
  return "name:" . $name . " age: " . $age;
}


사용은 다음과 같이 변수에 바로 할당하고 변수를 호출하면 함수가 실행됩니다.

// 클로저를 생성하고 $hello 에 할당
$hello = function ($name, $age) {
  return "name:" . $name . " age: " . $age;
};
 
// 함수 호출. 결과는 "name:Iron man age: 35" 라는 문자열이 출력
echo $hello ('Iron man', 35);

클로저 외부에 있는 변수를 사용할 경우 use 키워드로 선언해 주면 되며 여러 개의 변수가 필요하면 , 를 구분자로 기술합니다.

// 클로저를 생성하고 $hello 에 할당
$name = 'Iron man';
$age = 35;
$hello = function () use($name, $age) {  
	return "name:" . $name . " age: " . $age;
};
 
// 함수 호출.  "name:Iron man age: 35" 라는 문자열이 출력
echo $hello ();


클로저는 함수나 메소드의 콜백을 만들때 매우 유용합니다. 라라벨은 다양한 곳에서 클로저를 사용하고 있으며 대표적으로는 URL을 처리하는 라우트(route) 에서 사용하고 있으므로 라라벨을 잘 사용하기 위해서는 클로저에 대한 이해가 필수적입니다.


다음은 브라우저로 "about/hello" 라는 URL 에 접근할 경우 'Hello World' 라는 문자를 출력하는 URL 라우팅 처리로 클로저를 사용하고 있습니다.

Route::get('about/hello', function()
{
    return 'Hello World';
});