싱글톤 패턴이란?

인스턴스를 하나만 만들어 사용하기 위한 패턴이다.


이유?

커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우에 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고,

또 프로그램이 예상치 못한 결과를 낼 수 있다. 


싱글톤 패턴은 의미상 두 개의 객체(인스턴스)를 가질 수 없다. 

이를 구현하려면, 객체 생성을 위한 new 제약을 걸어야 하고, 만들어진 단일 객체를 반환 할 수 있는 메서드가 필요하다.

따라서 필요한 요소를 생각하면 다음의 세 가지가 있다.

- new를 실행 할 수 없도록 생성자에 private 접근 제어자를 지정한다.

- 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.

- 유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.

package singletonpattern;
 
public class Singleton{
    static Singleton singletonObject; // 정적 참조 변수
    
    private singleton() {}; // private 생성자
    
    // 객체 반환 메서드
    public static Singleton getInstance(){
        if(singletonObject == null){
            singletonObject = new Singleton();
        }
        
        return singletonObject;
    }
}
                                                    
cs



클라이언트 코드

package singletonPattern;
 
public class Client{
    public static void main(String[] args){
        // private 생성자이므로 new를 통해 인스턴스를 생성할 수 없다.
        // Singleton s = new Singleton();
        
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        Singleton s3 = Singleton.getInstance();
        
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        
        s1 = null;
        s2 = null;
        s3 = null;
    }  
}
 
cs

메모리 구조에서 힙에 객체를 할당하지 않 고, 스태틱영역에 객체를 만들고 접근하는 방법을 사용하는 것이다.

단일 객체인 경우 결국 공유 객체로 사용되기 때문에 속성을 갖지 않게 하는 것이 정석이다.
단일 객체가 속성을 갖게 되면 하나의 참조 변수에 의해 바꾸어진 단일 객체의 속성이 다른 참조 변수에 영향을 미치기 때문

하지만 읽기 전용 속성을 가지는 것은 문제 없다. 싱글톤은 읽기전용속성을 이용하는 목적으로 하나의 객체만 만들어서 관리




'DesignPattern' 카테고리의 다른 글

더블 체킹 락킹(Double Checking Locking)  (0) 2015.09.22
Posted by slender ankles
,