고양이 여름이의 지식채널

Laravel 서비스 컨테이너. 설명 및 예제 본문

Programming/Laravel

Laravel 서비스 컨테이너. 설명 및 예제

썸머캣 2023. 2. 21. 00:39

service container

서비스 컨테이너.

Laravel 서비스 컨테이너는 PHP 응용 프로그램에서 종속성 관리를 단순화하는 강력한 기능입니다.

이번에는 예제 코드를 사용하여 서비스 컨테이너의 작동 방식을 살펴봅니다.

 



사용자 데이터를 가져오기 위해 UserRepository 클래스를 사용해야 하는 UserController 클래스가 있다고 가정합니다.

이를 구현하기 위해 먼저 인터페이스 UserRepositoryInterface 를 만듭니다. 이 인터페이스는  UserRepository 클래스가 구현해야 하는 메서드를 정의합니다.

 

Interface

다음은 인터페이스 코드입니다.

interface UserRepositoryInterface {
    public function find($id);
}

 

class

이제 UserRepositoryInterface 인터페이스를 상속하여 구현하는 UserRepository 클래스를 만들 수 있습니다.

class UserRepository implements UserRepositoryInterface {
    public function find($id) {
        // Code to fetch user data
    }
}

 

bind

Laravel 서비스 컨테이너를 이용하려면 인터페이스와 클래스간의 관계를 바인딩 해줘야합니다.

이 작업은 App/Providers 디렉토리에 있는 AppServiceProvider 클래스에서 수행합니다.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\UserRepository;
use App\Contracts\UserRepositoryInterface;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
    	# 바인딩 등록을 해줍니다.
        $this->app->bind(UserRepositoryInterface::class, UserRepository::class);
        
        
        # User인터페이스를 상속받는 또 다른 클래스가 있을 경우에도 바인딩을 해줘야한다.
        // $this->app->bind(UserRepositoryInterface::class, PostRepository::class);
    }
}

 

반응형

 

DI

마지막으로 사용자 데이터를 가져오기 위해 UserRepository 클래스에 의존(의존성 주입)하는 UserController 클래스를 만듭니다.

class UserController {
    protected $userRepository;

    public function __construct(UserRepositoryInterface $userRepository) {
        $this->userRepository = $userRepository;
    }

    public function show($id) {
        $user = $this->userRepository->find($id);
        // Code to display user data
    }
}

UserRepositoryInterface 를 상속하는 어느 클래스가 생성되어도 처리가 가능해집니다.
- 생성시 UserRepository 로 생성하게 되면 $this->userRepository는 UserRepository 객체가 되는 것이고 

- PostRepository 로 생성하게 되면 $this->userRepository는 PostRepository 객체가 됩니다.

 

 

resolve()

추가적으로 위의 UserController 클래스의 인스턴스를 다음과 같은 방법으로 사용할 수 있습니다.

$userController = app()->make(UserController::class);

 


 

 

 

PHP 파일 업로드, 다운로드 예제

 

PHP 파일 업로드, 다운로드 예제

PHP를 이용한 파일 업로드와 다운로드 코드 예제입니다. Upload 아래는 업로드 예제입니다. // 파일 전송 form 위의 예제에서는 업로드된 파일을 임시 위치에서, 지정된 위치로 이동하는 move_uploaded_fi

summer-cat93.tistory.com

 

728x90
반응형
Comments