📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 04 싱글톤(Singleton), 팩토리(Factory) 패턴 소개

2025. 8. 8. 20:54프로그램/PHP 중급

📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 04 싱글톤(Singleton), 팩토리(Factory) 패턴 소개

📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 04 싱글톤(Singleton), 팩토리(Factory) 패턴 소개

 

디자인 패턴이란 무엇인가요

디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제들을 해결하기 위한 검증된 해결책입니다. 코드를 더 효율적이고, 재사용 가능하며, 유지보수하기 쉽게 만드는 데 도움을 줍니다. 이번 시간에는 여러 패턴 중에서도 가장 기본적이면서도 중요한 #싱글톤 패턴과 #팩토리 패턴에 대해 알아보겠습니다.


싱글톤(Singleton) 패턴

#싱글톤 패턴은 클래스의 인스턴스를 단 하나만 생성하도록 보장하는 패턴입니다. 이 하나의 인스턴스를 애플리케이션 어디서든 접근할 수 있도록 제공합니다. 주로 데이터베이스 연결, 로깅 클래스 등 시스템 전체에서 공유되어야 하는 객체를 만들 때 사용됩니다.

싱글톤 패턴 구현 예제

PHP
 
<?php
class Database
{
    private static $instance = null;

    private function __construct()
    {
        // 데이터베이스 연결 로직
    }

    public static function getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new Database();
        }
        return self::$instance;
    }

    public function query($sql)
    {
        // 쿼리 실행 로직
        echo "Executing query: " . $sql;
    }
}

$db1 = Database::getInstance();
$db1->query("SELECT * FROM users");

$db2 = Database::getInstance();
$db2->query("SELECT * FROM products");

// $db1과 $db2는 동일한 인스턴스입니다.
var_dump($db1 === $db2); // bool(true)
?>

 

팩토리(Factory) 패턴

#팩토리 패턴은 객체 생성 로직을 별도의 클래스(팩토리)로 분리하는 패턴입니다. 즉, 어떤 객체를 생성할지 클라이언트(호출자)가 직접 결정하지 않고, 팩토리에 요청하여 객체를 '만들어' 받습니다. 이를 통해 객체 생성 코드를 한 곳에 모아 관리하고, 새로운 객체 타입이 추가되어도 기존 코드를 변경할 필요 없이 유연하게 확장할 수 있습니다.

팩토리 패턴 구현 예제

PHP
 
<?php
interface Product
{
    public function getName();
}

class A_Product implements Product
{
    public function getName()
    {
        return "Product A";
    }
}

class B_Product implements Product
{
    public function getName()
    {
        return "Product B";
    }
}

class ProductFactory
{
    public static function createProduct($type)
    {
        switch ($type) {
            case 'A':
                return new A_Product();
            case 'B':
                return new B_Product();
            default:
                throw new Exception("Invalid product type.");
        }
    }
}

$productA = ProductFactory::createProduct('A');
echo $productA->getName(); // Product A

$productB = ProductFactory::createProduct('B');
echo $productB->getName(); // Product B
?>

싱글톤 패턴과 팩토리 패턴의 차이점

두 패턴 모두 객체 생성과 관련이 있지만, 목적이 다릅니다. #싱글톤은 클래스의 인스턴스를 단 하나만 존재하도록 보장하는 것이 핵심입니다. 반면 #팩토리 패턴은 어떤 객체를 만들지 생성 로직을 분리하여 유연성을 확보하는 것이 목적입니다. 팩토리 패턴으로 생성된 객체는 여러 개일 수 있습니다.

 

 

일반사무/게임/마케팅 용도별 고정IP 제공, 마케팅,게임 적용 가능

https://xn--299ao67b9qbmsf04c.net/

 

VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com