본문 바로가기
CS/디자인패턴

[CS : 디자인패턴] 싱글톤(Singleton)

by 왹져박사 2023. 4. 13.
728x90

디자인패턴에서 생성패턴의 하나인 싱글톤.

수업에서 계속 다뤄 구조와 의미는 알지만, 스스로 싱글톤이 뭐야?라고 했을 때 쉽게 대답하기 어려웠다.

다른 디자인패턴을 공부하기 전에 개념적으로 확실히 하고 싶어 다시 공부하며 복습하였다. 

 

싱글톤(Singleton)

한 클래스가 한 개의 인스턴스만 갖도록 제한. 

프로그램 시작부터 종료까지 동일한 인스턴스로 반환되어 전역 범위에서 접근 가능하게 하는 패턴이다. 

중앙에서 관리 혹은 정보 공유가 필요할 때 주로 쓰인다. 

 

장점

하나의 인스턴스를 공유하며 사용하기 때문에 생성 비용이 줄어듦

 

단점

의존성이 높아짐 - 독립적인 테스트가 어려워짐

 

의존성 주입

결합을 느슨하게 만들어줌

 

장점

모듈들을 쉽게 교체 가능한 구조가 되어 테스트가 쉬워짐

의존성 방향이 일관됨

쉽게 추론 가능

모듈 간 관계 명확

단점

클래스 수가 늘어나 복잡성 증가

런타임 페널티가 생기기도 함

원칙

상위 모듈은 하위 모듈에서 어떠한 것도 가져올 수 없음

둘 다 추상화에 의존, 추상화는 세부 사항에 의존x

 

(C#) 예시

일반적으로 다음과 같은 형태로 제작한다. 

클래스 내부에 private static instance변수와 해당 클래스의 인스턴스를 생성하는 메서드를 작성한다. 

인스턴스를 반환하는 메서드를 public static으로 선언하여 외부에서 접근 가능하게 만든다. 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DataManager
{
    private static DataManager instance = new DataManager();

    private DataManager()
    {
    }
    public static DataManager GetInstance()
    {
        return DataManager.instance;
    }
}

 

728x90