Singleton Pattern

wangjh789·2022년 8월 31일
0

Design Pattern

목록 보기
1/13
public class DatabaseConnector{
	private static DatabaseConnector INSTANCE;
    
    private DatabaseConnector(){}
    
    public static DatabaseConnector getInstance(){
    	if(INSTANCE == null){
        	INSTANCE = new DatabaseConnector();
        }
    }
}

위의 코드는 싱글톤 패턴을 적용한 DatabaseConnector 클래스이다.

문제

  1. 멀티 쓰레드 환경에서도 싱글톤을 보장할까?
if(INSTANCE == null){
	synchronized(DatabaseConnector.class){
    	INSTANCE = new DatabaseConnector();
    }
}

멀티쓰레드 환경에서 getInstance()으로 2개의 객체가 생성될 수 있기에 클래스 단위의 동기화가 필요하다.
2. Reflection Attack
private 생성자라도 reflection을 이용하면 객체를 만들 수 있어 하나의 객체만 존재한다는 것을 보장하지 못한다.

-> Enum을 활용하자

profile
기록

0개의 댓글