백엔드

[패턴] 싱글톤 패턴 (Singleton pattern)

음그냥 2025. 3. 3. 00:20
728x90
반응형

 

public class Company {
    private static Company instance = new Company();  // ① 클래스 로딩 시 객체 생성

    private Company() {}  // ② private 생성자 (외부에서 new 사용 불가)

    public static Company getInstance() {
        if( instance == null) { // ③ 항상 false이므로 실행될 일 없지만 방어적인 코드작성
            instance = new Company();
        }
        return instance; // ④ 항상 최초에 생성된 객체 반환
    }
}

 

public class Company {
    private static Company instance; // 초기화 X (null 상태)

    private Company() {}

    public static Company getInstance() {
        if (instance == null) { // 최초 호출 시에만 new Company() 실행
            instance = new Company();
        }
        return instance;
    }
}
  • 생성자를 private으로 선언하여 외부에서 객체 생성방지 -> 메서드를 static으로 만들어서 객체생성안해도 생성가능
  • 외부에서 Company.getInstance(); 로 호출시 단일객체로 돌려씀
  • 세계날짜, 달력, 사원명부같이 하나로 통일해야하는 정보에 사용됨

 

public class CompanyTest {

	public static void main(String[] args) {
		Company company1 = Company.getInstance();
		Company company2 = Company.getInstance();
		
		System.out.println(company1);
		System.out.println(company2);
		
		//Calendar calendar = Calendar.getInstance();  //자바에서 Calendar클래스도 싱글톤패턴임
	}
}
728x90

 

 

싱글톤패턴의 클래스 다이어그램

클래스 다이어그램

 

클래스명

멤버변수

생성자, 메서드명

순서로 작성되고 +는 public, -는 private임

 

 

728x90
반응형