public class DatabaseConnector{
private static DatabaseConnector INSTANCE;
private DatabaseConnector(){}
public static DatabaseConnector getInstance(){
if(INSTANCE == null){
INSTANCE = new DatabaseConnector();
}
}
}
위의 코드는 싱글톤 패턴을 적용한 DatabaseConnector
클래스이다.
if(INSTANCE == null){
synchronized(DatabaseConnector.class){
INSTANCE = new DatabaseConnector();
}
}
멀티쓰레드 환경에서 getInstance()
으로 2개의 객체가 생성될 수 있기에 클래스 단위의 동기화가 필요하다.
2. Reflection Attack
private 생성자라도 reflection을 이용하면 객체를 만들 수 있어 하나의 객체만 존재한다는 것을 보장하지 못한다.
-> Enum을 활용하자