Back-End/Java

[Java] Gof 디자인 패턴 - 싱글톤패턴 (static 응용)

nanee_ 2021. 9. 7. 21:31
728x90
반응형
SMALL

싱글톤 패턴 (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 메서드를 불러와 객체를 만들 수 있는 것이다.

 

 

 

 

 

 

 

728x90
반응형
LIST