목차
💡
- 왜 싱글톤 패턴을 사용해야 하는가?
- 설계도는 어떻게 생겼나?
- 실제로 어떻게 구현하나?
- 장점과 단점은 무엇인가?
왜 싱글톤 패턴을 사용해야 하는가?
시스템 전체에서 단 하나의 인스턴스만 존재해야 하고, 이를 어디서든 공유해서 사용해야 할 때, 사용합니다.
- 같은 객체를 무분별하게 생성하면 메모리가 낭비되고, 데이터 처리가 복잡해 질 수도 있습니다.
- 게임을 통한 예시 : 온라인 게임을 할 때, 플레이어 객체 한 개 당 서버 관리자 객체도 하나씩 생기면, 데이터 통신의 복잡도가 훨씬 올라갑니다.
- 간단하게 서버 객체를 단 하나만 만들고, 플레이어와 서버 객체끼리 초기화만 되어진다면, 간단하게 처리가 가능합니다.
설계도는 어떻게 생겼나?
실제로 어떻게 구현하나?
싱글톤 객체 설정
public class SingletonServer {
// 1. 자신을 담을 static 변수 (아직 생성 안 함)
private static SingletonServer instance;
// 데이터를 공유하는지 확인하기 위한 테스트 변수
public int connectedPlayers = 0;
// 2. 외부 생성 차단 (private 생성자)
private SingletonServer() {
System.out.println("서버가 시작되었습니다. (최초 1회만 실행)");
}
// 3. 외부에서 접근 가능한 static 메서드 (통로 개방)
public static SingletonServer getInstance() {
if (instance == null) {
instance = new SingletonServer(); // 없을 때만 생성
}
return instance;
}
}
사용 예시
public class Main {
public static void main(String[] args) {
// Player A가 서버에 접속
SingletonServer serverForA = SingletonServer.getInstance();
serverForA.connectedPlayers++;
// Player B가 서버에 접속
SingletonServer serverForB = SingletonServer.getInstance();
serverForB.connectedPlayers++;
// 결과 확인: 객체는 하나이므로 값은 공유됨 (출력: 2)
System.out.println("현재 접속자 수: " + SingletonServer.getInstance().connectedPlayers);
}
}
장점과 단점은 무엇인가?
장점
- 메모리 절약
- 객체가 생성하고 소멸할 때 발생하는 메모리 낭비를 방지합니다.
- 데이터 공유 용이
- 전역 인스턴스이기 때문에, 타 클래스 간에 데이터를 쉽게 공유할 수 있습니다.
단점
- 결합도
- 너무 많은 곳에서 이 객체를 참조하게 되면, 시스템의 구조가 복잡해지고 수정이 어려워집니다.
- 테스트의 어려움
- 테스트 때마다, 초기 세팅을 해줘야합니다. 만일 A라는 싱글톤 객체를 호출 했을 시점에 전역 상태에 세팅된 값이 없다면 에러가 뜨게 됩니다.
- 남용 주의
- 하나의 객체에 너무 많은 책임을 몰아넣으면 유지보수가 불가능한 상황이 올 수도있습니다.
'LV3_Advanced > GOF 패턴' 카테고리의 다른 글
| Adapter (어댑터) - 구조 패턴 #2 (0) | 2026.02.24 |
|---|---|
| Strategy (스트래티지) - 행위 패턴 #2 (0) | 2026.02.20 |
| Template Method (템플릿 메서드) - 행위 패턴 #1 (0) | 2026.02.19 |
| 퍼사드 (Facade) - 구조 패턴 #1 (0) | 2026.02.19 |
| Builder (빌더) - 생성 패턴 #2 (0) | 2026.02.16 |