JS의 싱글톤과 사용 방법

안녕하세요 팀,

오늘은 싱글톤과 우리가 일상적으로 어떻게 사용하고 있는지에 대해 말씀드리고자 합니다.
따라서 싱글톤 패턴을 사용하면 특정 클래스의 단일 인스턴스를 만들 수 있습니다. 어떤 목적으로 도움이 될 수 있습니까? 우리는 그것들을 다음 용도로 사용하고 있습니다:
  • 기본 서비스와의 데이터 전송을 처리하는 데이터 교환 서비스
  • 애플리케이션 시작 시 한 번만 인스턴스화할 수 있는 데이터 처리 서비스
  • 캐시 서비스
  • 테스트 목적

  • 예를 들어 이전에 설명한 캐시 서비스( )를 계속 사용하기로 결정했습니다.
    우리 앱의 캐시 서비스는 어떻게 싱글톤을 만들까요?

    싱글톤을 생성하는 매우 기본적인 코드부터 시작하겠습니다.

    class SingletoneService {
      static instance;
    
      getInstance(args) {
        if (!SingletoneService.instance) {
          SingletoneService.instance = new SingletoneService(...args);
        }
    
        return SingletoneService.instance;
      }
    
      constructor(args) {
        // do something with args
      }
    
      doSomething() {
        // do something
      }
    }
    


    어떻게 작동합니까? 메인 프로그램에서 인수(필요한 경우)와 함께 이 getInstance 메소드를 호출하여 싱글톤 인스턴스를 생성할 수 있습니다.

    function main() {
      const instance = SingletoneService.getInstance();
    
      instance.doSomething();
    }
    main();
    


    getInstance 메서드를 호출하여 SingletoneService 클래스의 정적 인스턴스 필드 값을 확인한 다음 new 키워드를 사용하여 해당 클래스를 기반으로 새 개체를 인스턴스화합니다. 존재하는 경우 단순히 기존 인스턴스를 반환합니다.

    이제 초안 구현이 완료되면 이 기능을 CacheService로 이동해 보십시오.

    class SomeServiceWithDataCache {
      static instance;
    
      getInstance(args) {
        if (!SomeServiceWithDataCache.instance) {
          SomeServiceWithDataCache.instance = new SomeServiceWithDataCache(...args);
        }
    
        return SomeServiceWithDataCache.instance;
      }
    
      constructor() {
        this.cache = {
          isLoading: false,
          expire: 0,
          data: null
        };
        this.cacheSubscriptions = [];
      }
      ...
    }
    


    또한 싱글톤을 사용하여 클래스에 종속성을 주입할 수 있습니다.

    class DataProcessingService {
      // use existing DataCacheService instance by default
      constructor(cacheService = DataCacheService.getInstance()) {
        // do something in constructor)
      }
      ...
    }
    


    코드 격리 및 개방형 폐쇄 원칙을 구현할 수 있습니다.

    좋은 웹페이지 즐겨찾기