Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 싱글톤(Singleton) 패턴이란? 개념과 구현 방법 완벽 정리

싱글톤(Singleton) 패턴은 하나의 클래스에 인스턴스가 오직 하나만 존재하도록 보장하고, 그 인스턴스에 접근할 수 있는 전역 접근점을 제공하는 디자인 패턴입니다. 이를 통해 애플리케이션 전체에서 단 하나의 객체만 생성되어 공유되며, 객체의 상태가 일관되게 유지됩니다.

싱글톤 패턴을 사용하면 클래스의 객체를 직접 new 키워드로 생성할 필요 없이, 미리 만들어진 유일한 객체에 어디서든 즉시 접근할 수 있습니다. 주로 데이터베이스 연결, 설정(Configuration), 로거(Logger)처럼 애플리케이션 전역에서 단일 인스턴스가 필요한 경우에 널리 활용됩니다.

싱글톤 패턴의 핵심 특징

  • 단일 인스턴스 보장: 클래스의 인스턴스는 프로그램 전체에서 단 하나만 생성됩니다.
  • 전역 접근점 제공: 정적(static) 메서드를 통해 어디서든 동일한 인스턴스에 접근할 수 있습니다.
  • 외부 생성 차단: 생성자를 private으로 선언해 외부에서 객체를 임의로 생성하지 못하도록 합니다.

PHP 예제 코드

<?php
   class database {
      public static $connection;

      // 외부에서 직접 객체 생성을 막기 위해 생성자를 private으로 선언
      private function __construct(){
         echo "connection created";
      }

      // 유일한 인스턴스를 반환하는 정적 메서드
      public function connect(){
         if(!isset(self::$connection)){
            self::$connection = new database();
         }
         return self::$connection;
      }
   }
   $db = database::connect();
   $db2 = database::connect();
?>

실행 결과

connection created

코드 설명

위 예제는 싱글톤 패턴을 따르고 있기 때문에, 두 번째 호출인 $db2 = database::connect(); 시점에는 새로운 객체가 생성되지 않습니다. 생성자가 private으로 선언되어 있어 외부에서 new database()로 직접 인스턴스를 만들 수 없으며, 오직 connect() 메서드 내부에서 최초 한 번만 객체가 생성됩니다.

따라서 "connection created"라는 문구는 한 번만 출력되며, $db$db2는 결국 동일한 인스턴스를 참조하게 됩니다. 이처럼 싱글톤 패턴은 데이터베이스 커넥션처럼 리소스가 많이 드는 객체나, 애플리케이션 전체에서 하나의 상태만 유지해야 하는 경우에 매우 효과적으로 사용할 수 있습니다.