1. Singleton pattern(싱글톤 패턴)이란
싱글톤(Singleton) 패턴은 애플리케이션 전역에서 ‘하나의 인스턴스’만 존재하도록 보장해 주는 디자인 패턴입니다. 객체가 여러 번 생성되는 것을 방지하고, 어디에서든 동일한 인스턴스에 접근할 수 있게 합니다.
1.1 특징
장점
- 유일한 인스턴스 보장: 애플리케이션 전역에서 특정 구조체의 객체가 오직 하나만 존재하도록 보장합니다.
- 전역적인 접근: 중앙에서 설정/상태 등을 관리하기에 용이하며 어디서든 싱글톤 객체를 불러와 동일한 상태를 공유할 수 있습니다.
- 비용 절감: 리소스가 많이 드는 객체를 반복 생성할 필요가 없어, 메모리와 CPU 자원을 절약할 수 있습니다.
단점
- 전역 상태(Global State) 문제: 전역으로 공유되는 객체는 의존성 주입(Dependency Injection)이 어렵고, 모의(Mock) 테스트가 까다롭습니다.
- 코드 유연성 저하: 한 번 싱글톤이 생성되면 객체 교체가 쉽지 않아, 구조 확장이나 변경 시 리팩토링 비용이 커질 수 있습니다.
- 멀티스레드 동시성:
sync.Once
로 초기화 시점은 안전하게 보장할 수 있지만, 싱글톤 내부에서 관리하는 자료구조가 여러 고루틴에 의해 동시 업데이트될 경우, 별도의 뮤텍스(Mutex)나 동시성 제어가 필요
1.2 활용 사례
- 데이터베이스 연결 객체 (DB Connection Pool)
- 로깅 시스템 (Logger)
- 설정 파일 관리 (Configuration Manager)
- 캐싱 시스템 (In-memory Cache)
- 쓰레드 풀(Thread Pool) 관리
2. Go에서의 Singleton