싱글톤(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는 결국 동일한 인스턴스를 참조하게 됩니다. 이처럼 싱글톤 패턴은 데이터베이스 커넥션처럼 리소스가 많이 드는 객체나, 애플리케이션 전체에서 하나의 상태만 유지해야 하는 경우에 매우 효과적으로 사용할 수 있습니다.