현재 위치: > 최신 기사 목록> PHP 디자인 패턴에 대한 심층적 인 이해 : 소개에서 실용적 숙달까지

PHP 디자인 패턴에 대한 심층적 인 이해 : 소개에서 실용적 숙달까지

M66 2025-10-07

PHP 디자인 패턴으로 시작합니다

설계 패턴은 소프트웨어 개발에서 널리 입증 된 솔루션으로 유지 관리 가능하고 확장 가능하며 재사용 가능한 코드 구조를 구축 할 수 있습니다. PHP에 설계 패턴을 적용하면 코드 품질을 향상시킬뿐만 아니라 복잡한 비즈니스 요구에 직면 할 때 시스템을보다 유연하게 만듭니다.

PHP 디자인 패턴의 세 가지 범주

설계 패턴은 일반적으로 생성 유형, 구조 유형 및 행동 유형의 세 가지 범주로 나뉩니다. 각 카테고리마다 초점과 사용 시나리오가 다릅니다.

생성 모드

크리에이티브 모드는 객체의 생성 프로세스를 캡슐화하여 특정 클래스에서 코드를 분리하는 데 사용됩니다. 일반적인 창조 패턴에는 다음이 포함됩니다.

  • 공장 패턴 : 특정 구현 클래스에 직접 의존하지 않고 공장 수업을 통해 객체를 만듭니다.
  • 싱글 톤 패턴 : 클래스에 응용 프로그램에 인스턴스가 하나만 있는지 확인하십시오.

구조 모드

구조 패턴은 클래스와 객체의 조합에 중점을 두어 시스템을보다 유연하고 유지 관리하기 쉽도록 목표로합니다. 일반적인 구조 패턴은 다음과 같습니다.

  • 어댑터 모드 : 원래 인터페이스와 호환되지 않는 클래스가 함께 작동 할 수 있습니다.
  • 프록시 모드 : 프록시 클래스를 통해 대상 개체에 대한 액세스를 제어합니다.
  • 데코레이터 모드 : 원래 클래스를 수정하지 않고 개체에 새로운 기능을 동적으로 추가합니다.

행동 패턴

행동 모드는 객체 간의 의사 소통 방법과 책임을 설명하는 데 사용됩니다. 주요 모드는 다음과 같습니다.

  • 관찰자 모드 : 게시/구독 메커니즘을 구현하십시오.
  • 정책 모드 : 런타임시 알고리즘 또는 동작을 무료로 전환 할 수 있습니다.
  • 템플릿 메소드 패턴 : 알고리즘 골격을 정의하고 서브 클래스가 특정 단계를 다시 작성하도록 허용합니다.

실제 사례 : 쇼핑 카트 시스템의 설계 모드 응용 프로그램

다음 예제는 공장 패턴, 에이전트 패턴 및 정책 패턴을 포함하여 쇼핑 카트 시스템에서 설계 패턴의 실제 적용을 보여줍니다.

공장 모드를 사용하여 할인 서비스 객체를 만듭니다

 interface DiscountServiceFactory {
  public static function create(): DiscountService;
}

class NormalDiscountService implements DiscountService {
  // ...
}

class PremiumDiscountService implements DiscountService {
  // ...
}

class DiscountServiceFactoryImpl implements DiscountServiceFactory {
  public static function create(): DiscountService {
    if (isPremiumCustomer()) {
      return new PremiumDiscountService();
    }
    return new NormalDiscountService();
  }
}

공장 모델을 통해 특정 클래스에 직접 의존하지 않고 사용자 유형을 기반으로 다양한 할인 서비스 인스턴스를 유연하게 생성 할 수 있습니다.

프록시 모드를 사용하여 쇼핑 카트에 로깅 기능 추가

 class CartLoggerProxy extends Cart {
  private $logger;

  public function __construct(Cart $cart, Logger $logger) {
    parent::__construct();
    $this->cart = $cart;
    $this->logger = $logger;
  }

  public function addItem(Item $item): void {
    parent::addItem($item);
    $this->logger->log("Added item to cart");
  }

  // 다른 방법도 비슷하게 확장할 수 있습니다.
}

프록시 모드는 로깅 또는 권한 제어 추가와 같은 중간 계층 (프록시)을 통해 원래 클래스의 기능을 향상시킵니다.

정책 모드를 통해 여러 할인 계산을 달성합니다

 interface DiscountStrategy {
  public function calculateDiscount(Cart $cart): float;
}

class NoDiscountStrategy implements DiscountStrategy {
  public function calculateDiscount(Cart $cart): float {
    return 0;
  }
}

class FlatDiscountStrategy implements DiscountStrategy {
  private $discount;

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

  public function calculateDiscount(Cart $cart): float {
    return $cart->getTotal() * $this->discount;
  }
}

// 전략 적용
$context = new DiscountContext();

if (isPremiumCustomer()) {
  $context->setStrategy(new PremiumDiscountStrategy());
} else {
  $context->setStrategy(new NoDiscountStrategy());
}

$discount = $context->calculateDiscount();

전략 모델을 사용하면 다양한 할인 알고리즘을 자유롭게 전환 할 수 있으므로 시스템의 유연성과 확장 성이 향상됩니다.

결론

디자인 패턴은 프로그래밍 기술 일뿐 만 아니라 일종의 아이디어이기도합니다. 공장, 에이전트 및 전략 모델을 합리적으로 적용함으로써 PHP 프로젝트 구조를 더 명확하고 유연하게 만들고 복잡한 시나리오에서 우수한 유지 관리를 유지할 수 있습니다. 이러한 패턴을 마스터하면 PHP 개발 여정을위한 탄탄한 토대가 될 것입니다.