[Java] Gof 디자인 패턴 - 싱글톤패턴 (static 응용)
싱글톤 패턴 (Singleton Pattern)
: 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고,
최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴해야 하는 경우에 사용하는 디자인 패턴이다.
유일하게 존재해야하는 객체를 생성할 수 있다.
private 으로 생성자를 선언해서 상속이 불가능하게 지정해준다.
static 변수, 메서드를 활용해서 구현할 수 있다.
예제 코드
- Company.java
public class Company{
// private 로 생성자 생성 - 외부에서 new 할 수 없음
private Company(){
}
// static 변수를 활용해 내부에서 멤버변수 생성
private static Company instance;
// 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공
// instance 에 참조값이 들어있지 않다면 new 해주고, 아님 자기 자신을 반환
public static Company getInstance(){
if(instance == null){
instance = new Company();
}
return instance;
}
}
private 로 생성자를 만들면 외부 클래스에서 상속받지 못하게 된다.
static 변수를 활용해서 내부에서 객체를 생성하고, return 타입이 자기 자신(Company)이 된다.
생성자가 private 이기 때문에 외부에서 유일하게 인스턴스를 참조할 수 있는 경로를
public 메소드를 만들어 준다.
instance 값이 비어있는 null 값이라면 Company 객체를 생성해준다.
- MainTest.java
public class MainTest{
public static void main(String[] args){
Company com1 = Company.getInstance();
Company com2 = Company.getInstance();
// 주소 출력
System.out.println(com1);
System.out.println(com2);
}
}
구현이 가능한 main 함수가 있는 클래스에서
Company 객체 2개를 생성해준다.
com1, com2의 주소값이 담기게 되는데,
이를 출력을 해보면
아래와 같이 같은 주소값을 가지게 되는 것을 확인할 수 있다.
Calendar 클래스
: 날짜를 받아올 수 있는 java.util.Calendar 클래스도 싱글톤 패턴으로 생성할 수 있다.
protected 로 Calendar 생성자를 만들었다.
public 메서드로 외부에서 접근해 객체를 만들 수 있게 했다.
위와 같이 .연산자로 getInstance 메서드를 불러와 객체를 만들 수 있는 것이다.