Singleton 패턴

J.Noma·2021년 10월 18일
0

출처 : 얄팍한 코딩사전


Singleton 패턴이란?

소프트웨어를 만들다 보면, 어떤 클래스의 객체가 해당 프로세스에서 딱 하나만 만들어져 있어야 하는 경우가 있습니다

예로, 사용자가 우리가 만든 app을 사용하고 있는데 다크모드 설정을 했다면 다른 페이지로 이동하더라도 다크모드가 유지되어야 할 것입니다
즉, 어떤 페이지에 있든 다크모드 세팅을 관리하는 객체는 반드시 같은 것을 사용해야 하는데 이를 보장하기 위해 딱 하나의 객체만 만들어지도록 만든다면 singleton 패턴으로 설계한 것입니다


Singleton 패턴의 타입 만들기

하나의 객체만 만들 수 있는 타입을 설계해봅시다

1. initializer를 private으로 설정

  • 타입 밖에서 인스턴스를 생성하는 것을 차단
class Settings {
    var isDarkmode: Bool
    private init() {
    	self.isDarkmode = false
    }
}

2. 자기 자신 타입의 인스턴스를 저장하는 타입 프로퍼티를 정의

  • 하나의 인스턴스를 타입 프로퍼티로 소유
class Settings {
    static var settings = Settings()
    var isDarkmode: Bool
    private init() {
    	self.isDarkmode = false
    }
}

주의할 점은, 참조타입인 class를 써야 단일 인스턴스가 보장됩니다
값타입을 사용하면 다른 변수에 할당하면서 copy하므로 여러 개가 생기는 불상사가 발생합니다

var를 사용하면 싱글톤 인스턴스가 더 이상 필요없을 때, nil로 변경하여 해제시킬 수 있습니다


언어마다 Singleton을 안전하게 사용할 방법이 정의되어 있습니다

기본적으로 이런 shared 메모리 형태(다른 예로, 전역변수도 있습니다)는 multi-thread 환경에서 동기화 관련 오류를 유발할 소지가 있어 주의가 필요합니다

언어마다 singleton을 안전하게 사용할 방법들을 정의한다고하니 Swift의 방식을 (나중에^^;;) 알아봅시다. 밤이 늦었어요


단점, 유의사항

하나를 돌려써서 테스트가 빡셈. 앞의 테스팅이 뒷 테스팅에 영향을 미쳐서

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글