싱글톤 singleton 패턴 - 자바스크립트 예제
SW설계
읽는데 3분 소요
처음 쓰여진 날: 2025-09-02
마지막 수정일: 2025-09-02
조회수: 27
요약
객체지향 프로그래밍의 핵심, GoF(Gang of Four) 디자인 패턴 중 생성 패턴인 싱글톤(Singleton)을 자바스크립트 코드와 함께 알아봅니다. 정처기 실기 대비를 위한 주관식 문제가 포함되어 있습니다.
싱글톤 패턴 요약
패턴 종류 | 핵심 키워드 |
---|---|
싱글톤 (Singleton) | 한 클래스에 단 하나의 객체만 존재하도록 강제 |

싱글톤 (Singleton) 패턴
싱글톤 패턴은 이름 그대로, 한 클래스에 단 하나의 객체만 존재하도록 강제하는 디자인 패턴입니다. single
이라는 단어에서 알 수 있듯, 인스턴스가 유일하다는 것이 핵심입니다.
기본 구조
클래스 기반 언어에서 싱글톤은 보통 다음과 같이 구현합니다.
javascript
class Singleton {
constructor() {
// 인스턴스가 이미 존재하는지 확인합니다.
if (Singleton.instance) {
return Singleton.instance;
}
this.message = "나는 클래스 기반 유일 인스턴스야";
// 없다면, 현재 인스턴스를 저장합니다.
Singleton.instance = this;
}
}
// 사용 예시
const a = new Singleton();
const b = new Singleton();
console.log(a === b); // true ✅
console.log(a.message); // "나는 클래스 기반 유일 인스턴스야"
new Singleton()
을 두 번 호출했지만, 변수 a
와 b
는 정확히 동일한 인스턴스를 참조합니다. 🎯
언제 필요할까?
애플리케이션 전역에서 공유되어야 하는 자원이 있을 때 유용합니다. 대표적인 예로 로그 수집기(Logger) 가 있습니다.
만약 Logger 인스턴스가 여러 개라면 로그가 분산되어 기록되는 문제가 발생할 수 있습니다. ⚠️
javascript
class Logger {
constructor(name) {
this.name = name;
this.logs = [];
}
log(message) {
this.logs.push(`[${this.name}] ${message}`);
}
printLogs() {
console.log(this.logs.join("\n"));
}
}
// 인스턴스가 두 개 생성된 경우
const loggerA = new Logger("A");
const loggerB = new Logger("B");
loggerA.log("서버 시작");
loggerB.log("DB 연결됨");
loggerA.log("사용자 로그인");
// 로그가 각 인스턴스에 따로 저장됩니다.
loggerA.printLogs();
// [A] 서버 시작
// [A] 사용자 로그인
loggerB.printLogs();
// [B] DB 연결됨
이 문제를 해결하기 위해 Logger에 싱글톤 패턴을 적용하면, 여러 곳에서 인스턴스를 생성하더라도 실제로는 단 하나의 인스턴스만 사용하게 되어 로그를 중앙에서 관리할 수 있습니다.
javascript
class Logger {
constructor() {
if (Logger.instance) {
return Logger.instance;
}
this.logs = [];
Logger.instance = this;
}
log(message) {
this.logs.push(message);
}
printLogs() {
console.log(this.logs.join("\n"));
}
}
// 여러 곳에서 Logger를 호출해도 괜찮습니다.
const logger1 = new Logger();
const logger2 = new Logger();
logger1.log("서버 시작");
logger2.log("DB 연결됨");
logger1.log("사용자 로그인");
// 모든 로그가 하나의 인스턴스에 기록됩니다.
logger1.printLogs();
/*
서버 시작
DB 연결됨
사용자 로그인
*/
console.log(logger1 === logger2); // true
💡 싱글톤 패턴 중요 키워드
- 클래스에 오직 한 인스턴스만 존재하도록 강제한다.
정처기 기출 문제
기출 | |
문제 | 객체 하나만 생성하도록 하고 어디서든 참조할 수 있도록 하는 디자인 패턴은? |
보기 | |
답변 | |
정답 | 정답 보기 |
기출 | |
문제 | 특정 클래스의 인스턴스를 하나만 생성하도록 하고 이 인스턴스에 대한 접근 방법을 제공하는 디자인 패턴은? |
보기 | |
답변 | |
정답 | 정답 보기 |