[Laravel] Facade 만들기 및 사용
Laravel에서 Facade 만들기 및 사용
Facade 란
Laravel에서 Facade는 애플리케이션의 서비스 컨테이너에 등록된 서비스에 대한 정적과 유사한 인터페이스를 제공하는 클래스입니다. Facade는 서비스 컨테이너의 기본 클래스에 대한 "정적 프록시" 역할을 하며, 기존의 정적 메서드보다 더 많은 테스트 가능성과 유연성을 유지하면서 표현적인 구문을 제공합니다.
Facade 사용의 장점
- 단순성: Facade는 복잡한 논리에 액세스하는 간단한 방법을 제공합니다.
- 테스트 가능성: 정적 인터페이스에도 불구하고 Facade는 정적 메서드보다 테스트 가능성이 더 높습니다.
- 가독성: 코드를 더 읽기 쉽고 이해하기 쉽게 만듭니다.
1단계: 서비스 컨테이너 이해
파사드를 만들기 전에 파사드를 제공하고자 하는 서비스(클래스)가 있어야 합니다. Laravel 서비스 컨테이너는 클래스 종속성을 관리하고 종속성 주입을 수행하는 강력한 도구입니다
2단계: 서비스 클래스 만들기
먼저 서비스 클래스를 만듭니다. 이 클래스에는 파사드를 통해 노출하고자 하는 로직이 포함되어 있습니다.
namespace App\Services;
class VerificationService
{
public function verify()
{
return true;
}
}
3단계: 서비스 공급자 등록
서비스 공급자는 서비스를 서비스 컨테이너에 바인딩하는 곳입니다. 아직 서비스 공급자가 없으면 만듭니다.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\VerificationService;
class VerificationServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(VerificationService::class, function ($app) {
return new VerificationService();
});
}
}
config/app.php 파일에 공급자를 등록하는 것을 잊지 마세요.
4단계: Facade 만들기
Illuminate\Support\Facades\Facade를 확장하는 새로운 Facade 클래스를 만듭니다.
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class VerificationFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'App\Services\VerificationService';
}
}
5단계: Facade 별칭 지정
더 쉽게 액세스할 수 있도록 Facade 별칭을 지정할 수 있습니다. config/app.php의 별칭 배열에 추가합니다.
'Verification' => App\Facades\VerificationFacade::class,
6단계: Facade 사용
이제 다른 Laravel Facade와 마찬가지로 애플리케이션에서 Facade를 사용할 수 있습니다.
use Verification;
public function demo()
{
return Verification::verify();
}
Facade로 테스트하기
테스트할 때 Facade 뒤에 있는 기본 클래스 인스턴스를 모의로 쉽게 바꿀 수 있으므로 기본 클래스의 동작을 실제로 트리거하지 않고도 애플리케이션을 테스트할 수 있습니다.
결론
Laravel의 Facade는 애플리케이션에서 서비스를 사용하는 우아한 방법을 제공하여 더 깔끔하고 읽기 쉬운 코드를 제공합니다. 이러한 단계를 따르면 Laravel의 강력한 기능을 최대한 활용하여 사용자 정의 Facade를 만들고 사용할 수 있습니다.
Facade가 도움이 되지만 신중하게 사용해야 한다는 점을 기억하세요. 과도하게 사용하면 서비스 컨테이너의 흐름을 이해하는 데 문제가 발생할 수 있으며 신중하게 수행하지 않으면 테스트가 복잡해질 수 있습니다.