리액트(React) 싱글톤(Singleton) 패턴, 정말 나쁜 걸까요?
리액트(React)에서 싱글톤(Singleton) 패턴은 전역 상태 관리의 대안으로 제시되지만, 테스트(Test) 및 추적(Track)의 어려움으로 인해 부정적인 인식이 존재함
싱글톤(Singleton) 패턴은 클래스(Class) 기반 구현을 통해 가볍고(Lightweight) 간단하게 구현 가능하며, EventTarget 확장을 통해 타입 안전성(Type Safety)을 확보함
useSyncExternalStore 훅(Hook)을 활용하여 싱글톤(Singleton)의 상태 변화를 UI에 동기화(Synchronize)하여, 리액트(React) 네이티브(Native) 상태처럼 관리 가능
토스트 매니저(Toast Manager) 예시를 통해 싱글톤(Singleton) 패턴의 실용성을 보여주며, 전역 접근(Global Access)과 UI 업데이트(UI Update)를 용이하게 함
싱글톤(Singleton) 패턴의 재발견
본문에서는 리액트(React)에서 싱글톤(Singleton) 패턴이 전역 상태 관리의 대안으로 제시되지만, 테스트(Test) 및 추적(Track)의 어려움으로 인해 부정적인 인식이 있다고 지적한다. 하지만 싱글톤(Singleton)은 가볍고(Lightweight) 간단하게 구현할 수 있으며, 클래스(Class) 기반 구현을 통해 자바스크립트(JavaScript) 네이티브(Native) 기능 확장이 가능하다는 점을 강조한다.
클래스(Class) 기반 구현: 별도 라이브러리(Library) 없이 네이티브(Native) 기능을 활용하여 구현
EventTarget 확장: 타입 안전성(Type Safety) 확보를 위한 TypedEventTarget 클래스(Class) 확장
싱글톤(Singleton) 패턴 구현: 클래스(Class) 기반 접근 방식
글에서는 싱글톤(Singleton) 패턴을 구현하기 위해 자바스크립트(JavaScript) 클래스(Class)의 활용을 제안한다. 클래스(Class)는 네이티브(Native) 기능 확장이 용이하며, 별도의 패키지(Package) 의존성 없이 구현할 수 있다는 장점이 있다. 특히, EventTarget 확장을 통해 이벤트(Event) 기반 통신을 구현하여 상태 변화를 효율적으로 관리할 수 있다.
클래스(Class) 기반 구현: 코드 재사용성(Code Reusability) 및 유지보수성(Maintainability) 향상
EventTarget 확장: 상태 변화 감지 및 UI 업데이트(UI Update) 자동화
useSyncExternalStore 훅(Hook)을 활용한 UI 동기화
본문에서는 싱글톤(Singleton)의 상태 변화를 UI에 동기화하기 위해 useSyncExternalStore 훅(Hook)을 사용하는 방법을 제시한다. useSyncExternalStore는 외부 상태를 구독하고, 해당 상태의 스냅샷(Snapshot)을 가져오는 기능을 제공하여, 리액트(React) 컴포넌트(Component)와 싱글톤(Singleton) 간의 데이터 동기화(Data Synchronization)를 간편하게 처리할 수 있다.
subscribe 함수: 싱글톤(Singleton)의 변경 이벤트(Event) 구독
getSnapshot 함수: 싱글톤(Singleton)의 현재 상태 스냅샷(Snapshot) 반환
useSyncExternalStore: 싱글톤(Singleton) 상태 변화 감지 및 UI 자동 업데이트(UI Auto Update)
토스트 매니저(Toast Manager) 예시를 통한 실용성 입증
글에서는 싱글톤(Singleton) 패턴의 실용성을 보여주기 위해 토스트 매니저(Toast Manager) 구현 예시를 제시한다. 토스트 매니저(Toast Manager)는 애플리케이션(Application) 전역에서 접근 가능하며, UI 업데이트(UI Update)를 쉽게 처리할 수 있는 싱글톤(Singleton) 패턴의 장점을 잘 보여준다. 특히, useSyncExternalStore 훅(Hook)을 활용하여 토스트(Toast) 상태 변화를 UI에 실시간으로 반영한다.
전역 접근성(Global Accessibility): 애플리케이션(Application) 어디에서든 토스트(Toast) 메시지 표시 가능
UI 업데이트(UI Update) 자동화: 토스트(Toast) 상태 변경 시 UI 자동 갱신
싱글톤(Singleton) 패턴의 장점과 한계
싱글톤(Singleton) 패턴은 전역 상태 관리의 간편한 대안이 될 수 있지만, 과도한 사용은 코드 복잡성(Code Complexity)을 증가시킬 수 있다. 따라서 싱글톤(Singleton) 패턴을 적용할 때는 적절한 사용 범위와 설계 원칙을 고려해야 한다. 또한, 싱글톤(Singleton) 패턴은 테스트(Test)의 어려움을 야기할 수 있으므로, 테스트(Test) 용이성을 고려한 설계를 해야 한다.
장점: 전역 상태 관리의 용이성(Ease of Global State Management), 코드 간결성(Code Simplicity)
단점: 테스트(Test) 어려움, 코드 복잡성(Code Complexity) 증가 가능성