-
디자인 패턴 스터디 기록 (6) - 싱글톤 패턴✏️ 스터디 모음집/디자인 패턴 스터디 2022. 11. 2.
싱글톤 패턴
객체의 인스턴스가 오직 1개 “싱글톤 패턴”
컴퓨터 측면에서 더 디테일 하게 말하면,
프로세스가 실행 중에 "오직 하나의 오브젝트만 생성되도록 강제" 하는 디자인 패턴 입니다.
싱글톤 디자인 패턴을 가진 클래스를 사용해서 여러개의 오브젝트를 만들더라도 단 한개만 만들어집니다.
아래의 경우를 살펴볼까요?
class Singleton { static instance; // 한번만 메모리 공간을 차지 constructor() { if (!Singleton.instance) { Singleton.instance = this } return Singleton.instance; } } const s1 = new Singleton(); const s2 = new Singleton();
위 코드에서 s1 === s2 의 조건이 성립할까요?
→ 네 성립합니다.
const s1 = new Singleton(); 를 하면,
- Singleton class 에 static instance 선언 → 아직 undefined
- !Singletone.instance 의 조건에 따라 Singleton object를 할당
s1 은 해당 object를 가르킴
s2는 이미 위에서 object에 할당했으니, !Singleton.instance 조건 내부 로직을 생략하고 Singleton.instance를 그대로 리턴 하기 때문에 s2도 같은 object를 가르킴
→ 인스턴스를 오직 한 개로만 가져가면 어떤 이점이 있을까요?
메모리 측면이 가장 큰 이점으로 가져갈 수 있을 것 같습니다.
최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있습니다. 뿐만 아니라 이미 생성된 인스턴스를 활용하니 속도 측면에서도 이점이 있다고 볼 수 있습니다.
인스턴스가 2개 이상이 되었을 때 문제가 생기는 상황을 방지 할 수 있습니다.
예를 들어 게임의 사운드를 관리하는 사운드매니저 인스턴스가 2개 생겨 사운드가 겹치거나 하는 문제를 싱글톤을 사용해 방지 할 수 있습니다.
싱글톤을 어디서 사용해볼 수 있을까요?
저는 가장 대표적으로 다크, 라이트 모드에서 사용할 수 있을 것 같습니다.
화면 모드에 대한 세팅값 싱글톤 객체 생성기를 만들고 여러 페이지에서 세팅 객체를 생성하고 접근하면 동일한 결과값을 얻을 수 있기 때문입니다.
TIP.
싱글톤을 인터페이스로 빼서 해당 인터페이스를 extend 하면 해당 클래스를 싱글톤화 시키는 방식으로도 사용 할 수 있습니다.
'✏️ 스터디 모음집 > 디자인 패턴 스터디' 카테고리의 다른 글
디자인 패턴 스터디 기록 (7) - 복합 패턴과 MVC (0) 2022.12.12 클린코드 - 깨끗한 테스트 코드 짜기 (0) 2022.11.05 디자인 패턴 스터디 기록 (5) - 팩토리 패턴, 의존성 역전 (0) 2022.11.02 디자인 패턴 스터디 기록 (4) - 데코레이터 패턴 (0) 2022.11.02 디자인 패턴 스터디 기록 (3) - 객체 간의 강한 결합 VS 느슨한 결합 (0) 2022.10.27