디자인패턴
[Design Pattern] 싱글턴 (feat. static)
쉽코기
2021. 12. 14. 15:27
디자인 패턴중 싱글턴에 대해 정리해보려고 합니다.
추가적으로 Singleton 과 Static 클래스의 차이에 대해서도 정리해보았습니다.
1. 싱글턴이란
- 어떤 클래스에서 만들수 있는 인스턴스 수를 하나로 제한하는 패턴
- 이 객체에 전역적인 접근이 가능해야함
2. 싱글턴 예시
- 생성자를 private 으로 막는다.
- 해당 클래스에서 static , 자신의 자료형 변수로 객체를 들고있는다.
- 'instace' 객체를 어디서든 가져올 수 있도록 public 으로 getter를 만든다.

public class GameManager {
private static GameManager instance;
private GameManager() {
}
public static GameManager getGameManager() {
if (instance == null) {
instance = new GameManager();
}
return instance;
}
3. 싱글턴 과 Static 클래스의 비교
실제로 사용해보면 그 기능은 같지만 싱글턴 패턴이 갖는 장점이 존재한다.
- 다형성을 사용할 수있다.
- 시그내처를 그대로 둔 채로 멀티턴패턴으로의 전환이 쉽다.
- 객체의 생성시점을 어느정도 제어할 수 있다.
멀티턴이란?
싱글턴에서 오직 한개로 제한되었던 객체수가 2개이상의 특정 개수로 제한되는 상황을 말합니다
둘의 차이에 대해 더 자세히 설명되어 있습니다.
https://m.blog.naver.com/ss1511/221586516299
Singleton vs Static class 차이점
Singleton 패턴과 (모든 메서드가 static으로 이뤄진) Static Class의 차이 => Singleton이 ...
blog.naver.com
4. 싱글턴의 응용
싱글턴을 이용한 개발중 문제가 생길 수 있습니다.
최초로 인스턴스를 생성하는 과정에서는 인자가 필요하지만 객체를 가져오기만 할때는 인자가 필요하지 않는 경우입니다.
객체의 생성과 getter를 분리하여 제작 했습니다.
추가로 assert 문을 넣음으로서 잘못된 접근을 막아보았습니다.
클래스가 조금 지저분해지긴 했지만 객체의 생성과 파괴가 명확해져 개발에 있어 실수를 줄일 수 있는 장점을 갖게 되었습니다.

public static void createInstance(FileLoader fileLoader, MapManager mapManager) {
assert (instance == null) : "do Not create instace Twice";
instance = new GameManager(fileLoader, mapManager);
}
public static void deleteInstance() {
assert (instance != null) : "no instace to dlt";
instance = null;
}
public static GameManager getInstance() {
assert (instance != null) : "no instace to dlt";
return instance ;
}