싱글톤 패턴

김민구·2024년 12월 11일
0

C#

목록 보기
12/31

1. 싱글톤 패턴이란

  • 싱글톤(Singleton)패턴은 객체의 인스턴스가 오직 1개만 생성되는 패턴을 말한다.
  • 싱글톤 패턴이 적용된 객체는 하나의 인스턴스만 생성할 수 있고, 다른 객체에서 싱글톤 객체의 인스턴스를 생성하려 할 경우, 기존의 생성된 인스턴스가 있다면 이를 반환하는 형태로 사용
  • 모든 데이터를 전역으로 관리하여 쉽게 접근하게 하는 것
  • 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근하는 방법

2. 싱글톤 패턴을 사용하는 경우

  • 공통된 객체를 여러개 생성해서 사용하는 경우
  • 인스턴스가 절대적으로 하나만 존재하는 것을 명시하고 싶은 경우

3. 싱글톤 패턴의 장점

  • 편리성 : 최초로 생성된 객체 하나에만 접근하게 되므로 데이터를 접근하고 수정하는것이 용의
  • 중복방지 : 생성자를 다른 곳에서 새롭게 선언을 하더라도 이미 정적으로 선언된 객체가 반환되기 때문에 중복되어 생성되는 것을 방지
  • 빠른 접근 : 초기 객체 생성시 정적 메모리에 올라간 이후 호출할 때 빠르게 접근할 수 있음.
  • 메모리 절약 : 많은 클래스에서 동일한 객체의 인스턴스를 생성해야하는 경우, 싱글톤 패턴을 사용하여 매번 인스턴스를 생성하지 않고 불러서 쓰는 형태로 사용되어 메모리 절약

4. 싱글톤 패턴의 단점

  • 성능 저하 : 정적 메모리에 할당할 수 있는 메모리 크기가 제한적이므로 정적 메모리에 할당된 객체로 너무 큰 메모리가 쌓이게 되면 프로그램 성능이 현저히 낮아짐
  • 높은 결합도 : 프로그램이 복잡해지면서 싱글톤 인스턴스가 너무 많이 사용되거나 공유하게 되면 다른 클래스들 간의 결합도가 높아지게 되어 유지보수가 어려워진다.
  • 메모리 접근 : 하나의 정적 메모리를 사용하기 때문에 병렬처리나 동기화 같은 여러 방법으로 메모리에 접근하는데 문제가 생길 수 있음
  • 다중 인스턴스 생성: 위 문제처럼, 여러 스레드가 동시에 인스턴스를 생성하려고 할 때 예상치 못한 다중 인스턴스가 생성(싱글톤 패턴 특성에 위배된다.)될 수 있습니다.
  • 데이터 일관성 문제: 싱글톤 인스턴스가 공유하는 데이터가 있다면, 여러 스레드가 동시에 이 데이터를 수정할 때 데이터 일관성 문제가 발생할 수 있다.

예시 코드

  • 싱글톤
public sealed class Singleton
{
    private static readonly Singleton _instance = new Singleton();

    // 생성자를 private으로 만들어 외부에서 접근하지 못하도록 함
    private Singleton()
    {
        // 생성자 로직
    }

    public static Singleton Instance
    {
        get
        {
            return _instance;
        }
    }
}
  • Thread-safe 싱글톤
    ㄴ 여러 스레드에서 동시 접근해도 안전한 방식
public sealed class Singleton
{
    private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton());

    public static Singleton Instance { get { return lazy.Value; } }

    private Singleton()
    {
        // 생성자 로직
    }
}
profile
C#, Unity

0개의 댓글