[Laravel 기초] 7. Contracts

Contracts

라라벨 Contract 를 다룰려고 하는데 사실 오늘은 내용이 없습니다. 용어 정리한다고 생각하시고 가볍게 넘어가시면 되겠습니다.

Contract는 라라벨에서 제공하는 Core Service 들을 인터페이스 집합입니다. Contract 는 특별한 개념, 기술 같은 것이 아닙니다. Contract = Interface (라라벨 핵심 서비스) 입니다. ( <= 오늘 포스팅 내용 끝입니다.) 인터페이스를 정의 해놓고 라라벨 프레임워크를 사용하는데 있어 가이드라인, 청사진을 제시합니다.

Contracts는 Laravel Core Service Interface 집합이다.

라라벨에서 정의한 Contract들은 깃 허브 저장소 여기서 확인하실 수 있습니다. Contracts 의 구현 사항을 따라 라라벨 코어 서비스들을 확장하면서 어플리케이션을 구현하면 됩니다.

Contracts 사용 이유 ??

Dependency Injection에서 인터페이스를 사용하는 장점과 같습니다. DI와 DIP에 관한 포스팅을 참고하신 뒤 읽어 보시면 쉽게 이해됩니다.

여기서 라라벨 공식 사이트에 등록된 예제를 살펴보고 넘어가겠습니다. Repository 객체는 생성시 Memcached 캐시 저장소를 의존성 주입받습니다. Repository는 캐시저장소로 Memcached 에 강한 결합 관계에 있습니다. Memcached 캐시만 주입 받게되면서 다른 캐시 저장소는 사용할 수 없으니까요.

<?php

namespace App\Orders;

class Repository
{
    protected $cache;

    public function __construct(\SomePackage\Cache\Memcached $cache)
    {
        $this->cache = $cache;
    }
}

Memcached 대신 인터페이스 Cache 를 주입해 보겠습니다. 인터페이스를 주입하게 되면서 Memcached 외 DB, Redis, File 등 다양한 형태의 캐시 저장소를 주입받을 수 있는 다형성을 구현하게 됩니다. Repository 와 Cache 의 강한 결합이 인터페이스를 사용하면서 느스한 결합(Loose Coupling)으로 바뀌었습니다.

<?php

namespace App\Orders;

use Illuminate\Contracts\Cache\Repository as Cache;

class Repository
{
    protected $cache;

    public function __construct(Cache $cache)
    {
        $this->cache = $cache;
    }
}

TL;DR

  • 라라벨 Contracts 는 라라벨 코어 서비스 인터페이스들의 집합이다.
  • 위에 내용도 길다면 Contract = Interface

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다