[php] PHP 라이브러리 디자인 패턴 적용

목차


개요

PHP는 객체 지향 프로그래밍을 지원하는 유연하고 강력한 언어입니다. 라이브러리 디자인 패턴을 적용하여 소프트웨어 개발을 보다 유지보수 가능하고 확장 가능하게 만들 수 있습니다. 이 글에서는 PHP에서 자주 사용되는 다양한 디자인 패턴을 소개하고 적용하는 방법에 대해 알아보겠습니다.


싱글턴 패턴

싱글턴 패턴은 어떤 클래스가 단 하나의 인스턴스를 갖도록 보장하는 디자인 패턴입니다.

예를 들어, 데이터베이스 연결을 담당하는 클래스를 싱글턴 패턴으로 디자인한다고 가정해보겠습니다.

class DatabaseConnector {
    private static $instance;

    private function __construct() {}
    
    public static function getInstance() {
        if (!isset(self::$instance)) {
            self::$instance = new DatabaseConnector();
        }
        return self::$instance;
    }
}

위 코드에서 getInstance 메서드를 통해 항상 동일한 인스턴스를 반환하도록 구현했습니다.


팩토리 메서드 패턴

팩토리 메서드 패턴은 객체를 생성하는 인터페이스를 정의하지만, 이를 서브 클래스에서 결정하도록 하는 디자인 패턴입니다.

예를 들어, 다양한 유형의 유저 인증 클래스를 생성하는 팩토리 메서드를 구현해보겠습니다.

interface UserAuthentication {
    public function authenticate($username, $password);
}

class LocalUserAuthentication implements UserAuthentication {
    public function authenticate($username, $password) {
        // 로컬 데이터베이스에서 인증 수행
    }
}

class RemoteUserAuthentication implements UserAuthentication {
    public function authenticate($username, $password) {
        // 원격 서버에서 인증 수행
    }
}

이렇게 하면 클라이언트는 어떤 유형의 유저 인증 클래스를 사용할지 결정할 필요가 없습니다.


어댑터 패턴

어댑터 패턴은 두 개의 상이한 인터페이스를 가진 클래스들을 함께 작동할 수 있도록 하는 디자인 패턴입니다.

예를 들어, 외부 API와 로컬 클래스 간의 데이터 변환에 어댑터 패턴을 적용하면 다음과 같을 수 있습니다.

interface ExternalApi {
    public function fetchData();
}

class ExternalApiAdapter implements ExternalApi {
    private $internalApi;

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

    public function fetchData() {
        $data = $this->internalApi->fetchData();
        // 데이터 변환 수행
        return $transformedData;
    }
}

이렇게 함으로써, 외부 API와 내부 클래스 간의 호환성을 유지하면서 데이터 변환을 처리할 수 있습니다.


참고 자료