[디자인 패턴(Design Pattern)] 싱글톤(Singleton)

업데이트:

카테고리:

태그:


싱글톤 패턴이란?

싱글톤 패턴은 생성 패턴 중의 하나로 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 계속 사용하는 디자인 패턴이다.

장점

  • 정적인 메모리 영역을 얻어 만든 인스턴스를 사용하기 때문에 메모리 낭비를 방지
  • 싱글톤으로 만들어진 클래스의 인스턴스는 전역적이므로 클래스 사이의 데이터 공유가 쉽다.

단점

  • 싱글톤 인스턴스가 너무 많은 일을 하거나 데이터를 공유시킬 경우 다른 클래스간의 결합도가 높아진다.
  • 여러 프로세스에서 동시에 참조를 할 수 없다.
  • 멀티 쓰레드 환경에서 동기화를 하지 않으면 인스턴스가 2개 생성 될 수도 있다.

예시 (Kotlin)

kotlin에서는 object 키워드를 이용해 싱글톤 객체를 생성할 수 있다.

object SingletonTest{
    val data = mutableListOf<String>()
    
    fun function1(){
        
    }
    /*...*/
}

생성된 싱글톤 객체는 전역적이므로 다른 클래스에서 쉽게 호출할 수 있다.

SingletonTest.data.add("test1")
SingletonTest.function1()

예시 (java)

java에서는 약간의 스킬이 필요하다. 우선 static으로 객체 자신을 선언해 메모리에 올려둔 다음 외부에서 해당 객체를 불러올 메소드를 만들 면 된다.

public class SingletonTest {
    private static SingletonTest st = new SingletonTest();

    private SingletonTest(){}

    public static SingletonTest getInstance(){
        return st;
    }
}

이후 다른 클래스에서 getInstance()메소드를 통해 해당 객체를 불러올 수 있다.

SingletonTest st = SingletonTest.getInstance();