Design Patterns

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μœ„ν•œ μ½”λ“œμ™€ ν”„λ‘œμ νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 방법은 μ—¬λŸ¬ 가지가 있으며, 아킀텍쳐에 λŒ€ν•΄ μ›ν•˜λŠ”λ§ŒνΌ 생각할 수 μžˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ½”λ“œλ₯Ό 보닀 μ‰½κ²Œ κ΄€λ¦¬ν•˜κ³  λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μ΄ν•΄ν•˜κΈ° 쉽기 λ•Œλ¬Έμ— 일반적으둜 곡톡 νŒ¨ν„΄μ„ λ”°λ₯΄λŠ” 것이 μ’‹λ‹€.

Singleton

μ›Ή μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ””μžμΈ ν•  λ•Œ νŠΉμ • 클래슀의 ν•œ μΈμŠ€ν„΄μŠ€μ—λ§Œ μ•‘μ„ΈμŠ€ ν•  수 μžˆλ„λ‘ κ°œλ…μ μœΌλ‘œλ‚˜ ꡬ쑰적으둜 μ˜λ―Έκ°€ μžˆλŠ” κ²½μš°κ°€ λ§Žλ‹€.
싱글톀 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ 이 μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μžˆλ‹€.

SINGLETON CODE EXAMPLE

싱글톀 νŒ¨ν„΄μ˜ κ΅¬ν˜„μ€ λ‹€μŒκ³Ό κ°™μ•„μ•Όν•œλ‹€.:

  • 싱글톀 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•˜λŠ”μ§€ 확인
  • ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ κΈ€λ‘œλ²Œ μ•‘μ„ΈμŠ€λ₯Ό 제곡

일반적으둜 이것은 λ‹€μŒμ— μ˜ν•΄ μˆ˜ν–‰λœλ‹€.:

  • 클래슀의 λͺ¨λ“  μƒμ„±μžλ₯Ό λΉ„κ³΅κ°œλ‘œ μ„ μ–Έ
  • μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό λ¦¬ν„΄ν•˜λŠ” 정적 λ©”μ†Œλ“œλ₯Ό 제곡

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 섀계할 λ•Œ νŠΉμ • 클래슀의 κ²½μš°μ—λŠ” 였직 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œμ΄ μ‘΄μž¬ν•΄μ„œ λͺ¨λ“  κ³³μ—μ„œ κ·Έ μΈμŠ€ν„΄μŠ€λ§Œμ„ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λŠ” 점에 의미λ₯Ό 두고 μžˆλ‹€.

<?php
class Singleton
{
    /*
    이 클래슀의 μ‹±κΈ€ν„΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ¦¬ν„΄ν•œλ‹€.
    */
    public static function getInstance()
    {
        static $instance = null;
        if (null === $instance) {
            $instance = new static();
        }

        return $instance;
    }

    /*
    이 ν΄λž˜μŠ€λŠ” μ‹±κΈ€ν„΄μœΌλ‘œ μ‚¬μš©ν•  κ²ƒμ΄λ―€λ‘œ 이 클래슀 μ™ΈλΆ€μ—μ„œ
    μƒμ„±ν•˜λŠ” 것을 κΈˆμ§€ν•˜κΈ° μœ„ν•΄ μƒμ„±μžλ₯Ό protected둜 μ œν•œν•œλ‹€.
    */
    protected function __construct(){
    }
}

class SingletonChild extends singleton
{
}

$obj = Singleton::getInstance();
var_dump($obj === Singleton::getInstance()); // bool(true)

$anotherOjb = SingletonChild::getInstance();
var_dump($anotherObj === Singleton::getInstance()); // bool(false)
var_dump($anotherObj === SingletonChild::getInstance()); // bool(true)

μƒˆ μΈμŠ€ν„΄μŠ€ 생성 μ‹œμ—λŠ” 정적 λ©”μ†Œλ“œμΈ getInstance()λ‚΄μ—μ„œ μ§€μ—°λœ 정적 바인딩을 톡해 μƒμ„±λ©λ‹ˆλ‹€.
staticν‚€μ›Œλ“œκ°€ μ‚¬μš©λ˜κ³  μžˆλŠ”λ° μ§€μ—°λœ 정적 바인딩을 μ‚¬μš©ν•¨μœΌλ‘œμ¨ Singleton클래슀λ₯Ό μƒμ†ν•΄μ„œ μ‹±κΈ€ν„΄ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” μžμ‹ ν΄λž˜μŠ€λ“€μ„ λ§Œλ“€ 수 있게 λœλ‹€.

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ HTTP μš”μ²­ 처리 μ‚¬μ΄ν΄μ—μ„œ νŠΉμ • 클래슀의 μΈμŠ€ν„΄κ°€ 단 ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€λŠ” 것을 λͺ…ν™•νžˆ ν•˜κ³  싢을 λ•Œ μ‹±κΈ€ν„΄ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

μ‹±κΈ€ν„΄ νŒ¨ν„΄μ„ μ‚¬μš©ν•  λ•Œ μ£Όμ˜ν•΄μ•Ό ν•  것은 νŒ¨ν„΄μ˜ νŠΉμ„±μƒ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전체 λ²”μœ„μ— 영ν–₯을 μ£ΌλŠ” μΌμ’…μ˜ μƒνƒœ 정보가 μƒκΈ΄λ‹€λŠ” 것이닀.