✅ 전 시스템에 단 하나의 인스턴스만이 존재하도록 구현하는 방식
✅ 여러 개의 instance를 만들면 문제가 되는 경우
- Java는 글로벌 변수가 없다
=> static 변수 사용- 생성자가 없으면 public default 생성자가 생성된다
=> 생성자를 private로 생성- 외부에서 생성된 static으로 생성된 객체를 사용할 수 있어야 한다
=> public 으로 선언된 static 메서드 제공
ex)
public class Company {
// default constructor
Company() {
}
}
public class CompanyTest {
public static void main(String[] args){
Company company1 = new Company();
Company company2 = new Company();
System.out.println(c1);
System.out.println(c2);
}
}
=> Company 인스턴스를 1개만 생성해야 할 때
public class Company {
// private : 외부에서 이 constructor를 생성할수 없도록 하기 위함
private Company(){
}
// private : 값이 변경되면 안되기 때문에
// static : 단 하나만 생성하기 위해
// insatce는 class 내부에서만 생성
private static Company instance = new Company();
// public : 외부에서 instace를 접근 가능
// static : 객체 생성없이 클래스 이름으로 참조해서 호출 가능
public static Company getInstance(){
if (instance == null){
instance = new Company();
}
return instance;
}
// 그런데, 이 메서드가 일반 메서드이기 때문에 객체를 생성한 후에 호출이 가능
// => static 으로 선언하면 가능!
}
public class CompanyTest {
public static void main(String[] args){
// Company company1 = new Company();
// Company company2 = new Company();
// 프로그램 내에서 인스턴스를 1개만 생성되도록 하자!
// Company 를 가져다 쓰기 위해서 Company 내부에 선언
Company c1 = Company.getInstance();
Company c2 = Company.getInstance();
System.out.println(c1);
System.out.println(c2);
// 결과 : 동일한 주소값이 출력됨
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
}
}