본문 바로가기

IT/디자인패턴

싱글톤(Singleton) 패턴

반응형

싱글톤 패턴이란,

애플리케이션 시작시 특정 클래스를 한번만 메모리에 할당하고 그 메모리를 인스턴스로 만들어 사용하는 디자인 패턴을 의미한다. 

생성자가 여러번 호출되더라고 실제론 최초 1번만 생성되며, 이후론 생성한 객체를 반환하게 된다.

 



싱글톤을 사용하는 이유


1. 고정된 메모리 영역에서 new로 매번 인스턴스를 생성하게 되면 메모리 낭비가 발생할 수 있다.
2. 싱글톤으로 생성된 인스턴스는 Static 인스턴스이기 때문에 다른 클래스에서 데이터를 공유하기 쉽다.
3. 두번째 인스턴스 이용부턴 객체 로딩 시간이 줄어듬으로 성능이 좋아진다.

 



싱글톤의 문제점 


1. 싱글톤 인스턴스가 많은 클래스에서 사용될 경우 클래스의 인스턴스간 결합도가 높아져 객체 지향 설계 원칙("개방-폐쇄 원칙")을 위배하게 된다.
2. 멀티쓰레드일 경우 동기화가 없으면 여러 개의 인스턴스가 생성될 수도 있다.

 



싱글톤 사용방법 

* 가장 일반적으로 많이 사용되는 방법


개발자가 직접 동기화 문제를 해결하는 것이 아닌 JVM의 클래스 초기화 과정에서 보장되는 원자적 특성을 이용하여 싱글톤의 초기화 문제를 해결할 수 있다.


holder 클래스를 통해 선언된 인스턴스가 static 임으로 클래스 로딩시점에 한번만 호출될 것이며 final을 사용해서 다시 값을 할당되지 않도록 만들었다.

public class Sample { 

private Sample() {} 

    private static class SampleHolder{ 
        public static final Sample INSTANCE = new Sample(); 
    } 

    public static Sample getInstance() 
    { 
        return SampleHolder.INSTANCE; 
    } 
}


#######################################################################################

public static void main(String[] args) {
	System.out.println("start");
    
	Sample a = Sample.getInstance();
}

 

참고 사이트 https://blog.seotory.com/post/2016/03/java-singleton-pattern

반응형