안녕하세요 오늘은 서비스 프로바이더와 파사드에 대해 알아보도록 하겠습니다.

 

서비스 프로바이더의 역할은 서비스컨테이너에 바인딩을 등록하는 역할을 합니다.
프로바이더는 register 와 boot 메소드를 가지고 있습니다.
register의 역할은 서비스컨테이너에 등록하는 역할을 수행합니다.
예제를 들어보겠습니다.

<?php 

namespace App\Providers; 

use Riak\Connection; 
use Illuminate\Support\ServiceProvider; 

class RiakServiceProvider extends ServiceProvider 
{ 
    /** 
     * Register bindings in the container. 
     * 
     * @return void 
     */ 
    public function register() 
    { 
        $this->app->singleton(Connection::class, function ($app) { 
            return new Connection(config('riak')); 
        }); 
    } 
} 


위의 예제는 라라벨 공식홈페이지의 내용입니다.
RiakServiceProvider클래스를 만들고  serviceProvider를 상속받습니다.
그후 레지스터 메서드를 작성하고 그안에 $this-app을 이용하여 서비스컨테이너에 등록하고 싶은 클래스를 등록합니다.
boot 메소드는 모든 서비스프로바이더의 register가 작업을 수행한 뒤 실행됩니다.

부트스트래핑 과정에 필요한 작업이 있다면 작성하여 사용 하면 됩니다.
마지막으로 config/app.php에 서비스 프로바이더를 등록하여 사용하면 됩니다.

 

파사드

파사드는 쉽게 말해서 static 메서드의 제공입니다.

보통 클래스들은 static을 붙여 정적 클래스를 제공하지만, 파사드를 사용하면 static을 붙이지 않고서도 정적메서드로써 사용가능합니다.

예제를 보며 알아보겠습니다.

class Test extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return "test";
    }
}

Facade클래스를 상속받아, getFacadeAccessor메서드 안에 정적클래스로 사용하고싶은 클래스를 작성해 줍니다.

우선 파사드 클래스를 상속받아 getFacadeAccessor메서드 안에 정적클래스로 사용하고싶은 클래스를 작성해 줍니다.
그후 return 값의 값을 이용하여 서비스컨테이너로 부터 test 라는 이름의 바인딩 객체를 찾아 메소드를 호출합니다.

 

즉, 파사드를 사용하기 위해선 서비스 프로바이더의 등록도 필요하다는 것을 알수 있습니다.

그리고 파사드도 app/config.php에 이름을 등록하여 사용해 줍니다.

 

여기까지 서비스 프로바이더와 파사드를 알아보았습니다.

다음 포스팅에는 라라벨의 기능들에 대해 알아보도록 하겠습니다.

+ Recent posts