-
[Design Pattern] 싱글톤 팁JAVA 2016. 9. 22. 12:36
디자인 패턴중 하나인 Singleton 패턴에 대해 사용하다가
사람들마다 스타일이 있는걸 알았다 여러가지 스타일이 있겠지만 그중에서 두개를 골랐다.
첫번째 스타일.
public class One {
private static One ourInstance = new One();
public static One getInstance() {
return ourInstance;
}
private One() {
}
}ourInstance 변수를 선언하고 바로 new One()을 생성하는 방법이 있고
두번째 스타일.
public class Two {
private static Two ourInstance = null;
public static Two getInstance() {
if (ourInstance == null) {
ourInstance = new Two();
}
return ourInstance;
}
private Two() {
}
}ourInstance 변수에 null을 주었다가 getInstance()를 호출하면 null체크후 새로운 객체를 만들어 사용하는 방법이 있다.
후자의 방법은 스레드 등 환경에서 동시에 getInstance()를 호출하는 경우에 ourInstance 변수에 미처 객체가 생성되지
않았는데 또 호출이 되어 두개의 객체를 생성하게 되는 경우가 생길 수 있어 안전하지 않게 된다.
그러므로, 객체를 하나만 생성하여 관리하는것을 목적으로 하는 싱글톤 패턴과 맞지 않다.
후자의 방법을 굳이 사용하고자 한다면 class 대신 enum으로 선언하여 사용하거나,
아래와 같이 싱크로나이즈를 사용하여 동기를 시켜 한개의 객체만을 생성 할 수 있게 해주는것이 좋다.
public static Two getInstance() {
if (ourInstance == null) {
synchronized(Two.class)
{
if(ourInstance == null)
ourInstance = new Two();
}
}
return ourInstance;
}귀찮으니까 첫번째 스타일의 방법을 사용하자.