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
반응형
'백엔드' 카테고리의 다른 글
[java] 배열복사, 얕은복사, 깊은복사 (0) | 2025.03.03 |
---|---|
[java] 배열 요소에 값이 있는 것만 추출하기 (1) | 2025.03.03 |
[java] 변수의 유효 범위와 메모리 (1) | 2025.03.02 |
[JSP] 스크립트릿(<% %>) 과 선언(<%! %>) 차이 (0) | 2024.10.16 |
[java] this, heap, stack메모리 (0) | 2024.08.03 |