본문 바로가기

Dev/PHP

[PHP] Laravel - 사용자 정의 클래스

 

 

 

 

본 포스팅은 PHP7.4 / Laravel 8 버전을 기준으로 작성되었습니다.

이번 포스팅에서는 어렵지는 않지만 간과하기 쉬운 사용자 정의 클래스를 생성하는 방법에 대해 알아보겠습니다.

 

Laravel에서 개발을 하다 보면 주로 app\Http\Controllers 경로에서 주로 작업을 많이 하게 됩니다.

DB 접속도 Eloquent 덕분에 여기저기 파일을 뒤적이지 않아도 간단하게 처리할 수 있기 때문에 컨트롤러가 많은 처리를 담당하게 됩니다.

 

이때 컨트롤러가 처리하는 일이 많아질 수록 코드가 복잡해지고 중복되는 함수가 발생할 가능성이 높아집니다.

이러한 이유 때문에 별도의 사용자 정의 클래스가 필요합니다.

 

본 포스팅에서는 필자가 실무에서 활용하는 파일 관리 구조를 예시로 기술해보도록 하겠습니다.

(반드시 제가 사용하는 방식이 옳다고는 보장할 수 없기 때문에 독자 여러분께서는 참고만 하시고 보다 좋은 구조를 연구해보는 것도 좋은 방법일 듯합니다.)

 

 

먼저 사용자 정의 클래스를 관리하기 위해 app폴더에 새로운 폴더를 생성해 줍니다.

본 예제에서는 모든 사용자 정의 클래스를 관리하기 위한 폴더 명을 Service로 지정했습니다.

 

사용자 정의 클래스 관리 폴더

 

해당 폴더 안에 CustomService.php라는 이름의 파일을 생성해주고 아래와 같이 코드를 작성해 줍니다.

 

<?php

namespace App\Service;
use Illuminate\Support\Facades\Log;
    
class CustomService
{
    public $name;
    public $email;
        
    public function __construct($name, $email){
        $this->$name = $name;
        $this->$email = $email;
    }
        
    public function printInfo(){
        Log::info("Name :{$this->$name}");
        Log::info("Email :{$this->$email}");
    }
}

?>

 

위 코드는 생성자를 통해 이름과 이메일을 받아오고 printInfo() 함수를 호출하면 이름과 이메일을 로그 파일에 기록해주는 간단한 클래스입니다.

 

컨트롤러에서 위 클래스를 호출해 보도록 하겠습니다.

먼저, php artisan make:controller MainController 명령어로 임의의 컨트롤러 클래스를 생성하고 아래의 코드를 작성합니다.

 

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Service\CustomService;

class MainController extends Controller
{
    public function index(Request $request){
        $cs = new CustomService('user', 'user@email.com');
        $cs->printInfo();
        
        return view('welcome');
    }
}

 

위 코드에서 중요한 부분은 use App\Service\CustomService; 입니다.

use에 들어가는 이름은  namespace + 클래스 이름이어야합니다.

 

이제 index 함수를 요청하는 라우트를 태우면 위 클래스가 실행되는 것을 확인할 수 있습니다.

결과를 직접 확인하려면 아래의 경로의 로그 파일을 열어야 합니다.

 

 

custom은 제가 예시를 위해 임의로 만든 프로젝트의 이름입니다.

위 laravel.log를 열면 가장 마지막 로그에 다음과 같이 기록이 되었음을 확인할 수 있습니다.

 

 

이것으로 사용자 정의 클래스 정의에 대한 포스팅을 마치겠습니다.