Mobile

flutter 에서 singleton 패턴 구현하는 방법

크레비즈 2025. 1. 31. 22:54

StoryBook api 를 Service Class 를 만들어서 구현할 때 Singleton 패턴을 이용합니다.

class StoryService {
  static const String _baseUrl = 'https://hacker-news.firebaseio.com/v0';

  // Singleton pattern
  static final StoryService _instance = StoryService._internal();
  
  factory StoryService() {
    return _instance;
  }
  
  StoryService._internal();
  ....
  ....
  ....
  }

 

 

AI가 설명해주는 것을 그대로 작성해보겠습니다.

StoryService._internal() 는 Dart에서 사용되는 private 생성자로, Singleton 패턴을 구현할 때 자주 사용되는 패턴입니다.

여기서 볼 수 있듯이, 
StoryService 클래스는 Singleton 패턴을 구현하고 있습니다. 구체적으로 설명하면:
  1. _internal()의 앞에 있는 언더스코어(_)는 Dart에서 private 멤버를 나타냅니다. 즉, 이 생성자는 클래스 외부에서 직접 접근할 수 없습니다.
  2. 이 패턴은 다음과 같이 작동합니다:
    • static final StoryService _instance = StoryService._internal(); - 클래스의 단일 인스턴스를 생성
    • factory StoryService() - 외부에서 StoryService()를 호출할 때 항상 동일한 _instance를 반환
  3. 이렇게 구현하는 이유는:
    • 클래스의 인스턴스가 하나만 존재하도록 보장
    • 메모리 효율성 향상
    • 전역적인 상태 관리가 필요한 경우에 유용

 

예를 들어, 코드에서 StoryService 를 사용할 때:
// 어디서든 동일한 인스턴스를 얻게 됨
var service1 = StoryService();
var service2 = StoryService();
print(service1 == service2); // true를 출력
이 패턴은 API 클라이언트나 데이터베이스 연결과 같이 애플리케이션 전체에서 하나의 인스턴스만 필요한 경우에 특히 유용합니다.