
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ์ค๊ธ
๐ PHP ์ค๊ธ - 6์ฃผ์ฐจ: OOP ์ฌํ ๋ฐ ๋์์ธ ํจํด ์๊ฐ - 04 ์ฑ๊ธํค(Singleton), ํฉํ ๋ฆฌ(Factory) ํจํด ์๊ฐ
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-08-08 20:55:58 | |
์กฐํ์ | 10 |
๐ 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 ์ ๊ณต, ๋ง์ผํ ,๊ฒ์ ์ ์ฉ ๊ฐ๋ฅ