싱글톤(Singleton) 패턴

khbin·2023년 11월 28일

싱글톤 패턴

소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. <위키백과 싱글턴패턴>

쉽게 말하면 싱글톤 클래스는 그 인스턴스가 단 하나만 생성되게 하는 것이다.
예시 코드를 보자면

public class Singleton
{
    private Singleton() { }
    private static Singleton instance = null;
    public static Singleton Instance
    {
        get
        {
            if (instance == null)
                instance = new Singleton();
            return instance;
        }
    }
}

이런 식으로 Singleton 인스턴스는 단 하나만 만들어지고 만들어졌다면 이미 만들어진 객체를 통해 접근한다.

그럼 static과 똑같은거 아닌가?
->Singleton과 static이 비슷하게 느껴져서 차이점을 찾아서 아래에 정리했다.

Singleton

  • 단 하나의 객체를 만들어서 생성하려고 할 때 없다면 하나를 생성하고 있다면 만들어져 있는 것을 리턴한다.
  • 확장과 인터페이스 구현이 가능하다
  • 언제 생성하는지에 대한 시점 확인이 가능하다.
  • 싱글톤은 구현으로 단 하나만 생성되게 보장된 것이지만, 클래스 객체이기 때문에 직렬화<1>가 가능하다.

Static

  • 인스턴스를 생성할 수 없다. 생성자도 만들 수 없다.
  • 프로그램이 시작할 때 정적 스택에 바로 초기화된다.
  • 쓰레드 관리가 어렵다.

전역에서 접근이 가능한 하나 뿐인 존재이니 주요 클래스나 관리자의 역할에 어울린다.

주의할 점

싱글톤 인스턴스가 너무 많은 책임을 짊어지는 경우를 주의해야한다. (OOP 단일책임원칙 위반)
싱글톤의 남발은 코드 결합도가 높아진다.
->싱글톤의 소스 코드가 바뀌면 그걸 갖다 쓰는 애들 다 영향을 받음

처음 봤을 땐 "싱글톤 개사기네 ㅋㅋ" 라는 생각이 들었지만 좋다고 남발하면 안되고
싱글톤을 굳이 안써도 되는 경우에서는 싱글톤을 안쓰는게 좋다 !

<1>직렬화 : 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정 <위키백과 직렬화>

[출처]
https://yjksw.github.io/singleton-vs-static/
https://os94.tistory.com/158

profile
틀린게 있다면 언제든지 알려주세요 감사합니다. 으라차차

0개의 댓글