java

[Java] Design Pattern 싱글턴 패턴 - Thread 사용시에 문제점 해결, 효율적인 코드

tonirr 2020. 3. 22. 16:26
  • synchronized 사용
	public synchronized static Database getInstance(String name) {
	// synchronized 를 사용하여 실행되는 것들을 줄세워 차례대로 실행 -> 첫번째 스레드만 실행
	// 비용이 비쌈
		if(singleton == null) {
			singleton = new Database(name);
		}
		return singleton;
	}

  • static 으로 미리 객체생성
public class Database {
	// static 이므로 프로그램이 시작될 때 동시에 객체 생성
	private static Database singleton = new Database("products");
	private String name;

	private Database(String name) {
		try {
			// 실제 데이터베이스 접속 환경과 비슷하게 시간이 걸리도록 처리
			Thread.sleep(100);
			this.name = name;
		}catch(Exception e) {
			
		}
	}
	
	public static Database getInstance(String name) {
	// static 으로 프로그램이 실행되면서 바로 객체가 생성되어 따로 메소드에서 처리x
		
		return singleton;
	}
	public String getName() {
		return name;
	}
	
}