싱글턴(singleton) 방식으로 객체 생성하기★★★★★
* 싱글턴(singleton) 방식?
- 생성자를 private 접근 지정자를 사용하여 외부에서 직접 접근을 못하게 불허하는 방식.
- 외부에서 해당 클래스의 인스턴스를 new로 생성하지 못하도록 하는 방식.
- 사용하는 이유 : 매번 객체를 생성하게 되면 메모리 성능이 느려지는 단점이 발생하기 때문.
ex1) 데이터베이스를 사용하는 경우, connection 객체는 계속 같은 DB에 연결될 것이기 때문에 connection 객체를 계속해서 생성해내면 메모리 성능 저하가 발생한다.
ex2) 공동으로 사용되는 파일 같은 경우, 모든 프로젝트원이 파일을 가져올 때마다 객체를 생성하게 되면 메모리 성능 저하가 발생한다.
ex3) 스타크래프트 게임을 설계한다고 가정 할 때, 마린의 체력은 60이라는 고유한 데이터를 가지고 있고, 각 객체 별로 체력바가 제각기 닳아가는 것이기 때문에 첫 체력을 설정할 때 체력이 60으로 설정된 객체를 사용하면 메모리 부하를 줄일 수 있다.
예제1) 기본 생성자를 통해 객체를 생성할 때
class Company {
public Company() { }
}
public class Ex01 {
public static void main(String[] args) {
Company com1 = new Company();
Company com2 = new Company();
Company com3 = new Company();
Company com4 = new Company();
Company com5 = new Company();
Company com6 = new Company();
Company com7 = new Company();
Company com8 = new Company();
Company com9 = new Company();
Company com10 = new Company();
System.out.println("com1 >>> " + com1);
System.out.println("com2 >>> " + com2);
System.out.println("com3 >>> " + com3);
System.out.println("com4 >>> " + com4);
System.out.println("com5 >>> " + com5);
System.out.println("com6 >>> " + com6);
System.out.println("com7 >>> " + com7);
System.out.println("com8 >>> " + com8);
System.out.println("com9 >>> " + com9);
System.out.println("com10 >>> " + com10);
}
}
예제2) private 처리된 생성자로 인해 싱글톤 방식의 객체를 생성할 때
class Company {
private static Company instance = null;
private Company() { }
public static Company getInstance() {
if(instance == null) {
instance = new Company();
}
return instance;
}
}
public class Ex01 {
public static void main(String[] args) {
Company com1 = Company.getInstance();
Company com2 = Company.getInstance();
Company com3 = Company.getInstance();
Company com4 = Company.getInstance();
Company com5 = Company.getInstance();
Company com6 = Company.getInstance();
Company com7 = Company.getInstance();
Company com8 = Company.getInstance();
Company com9 = Company.getInstance();
Company com10 = Company.getInstance();
System.out.println("com1 >>> " + com1);
System.out.println("com2 >>> " + com2);
System.out.println("com3 >>> " + com3);
System.out.println("com4 >>> " + com4);
System.out.println("com5 >>> " + com5);
System.out.println("com6 >>> " + com6);
System.out.println("com7 >>> " + com7);
System.out.println("com8 >>> " + com8);
System.out.println("com9 >>> " + com9);
System.out.println("com10 >>> " + com10);
}
}