[Flutter] Singleton

향신료·2023년 7월 27일
0

Singleton 이란?

앱 전체에서 단일 객체만을 유지하고 사용하기 위한 디자인 패턴



🤔 단일 객체란?


특정 클래스의 객체(인스턴스)가 단 한 번만 생성되고, 이후에는 해당 객체를 여러 곳에서 공유하여 사용하는 디자인 패턴.

객체의 중복 생성을 피하고 공유 리소스를 효율적으로 관리하는 데 사용됩니다.








사용 이유

주로 앱의 상태 관리, 리소스 공유, 설정 데이터, 효율성 등을 유지하기 위해 사용됩니다.


상태 관리 ( = 설정 관리 )

앱 전체에서 상태를 공유해야 하는 경우, 상태를 단일 객체에 저장하여 간편한 접근과 관리를 가능하게 합니다.

ex) 앱의 테마, 로그인 정보 등을 Singleton에 저장하여 다른 화면이나 위젯들에서 공통적으로 사용.



리소스 공유

앱 전체에서 단일 객체를 유지하므로, 여러 곳에서 해당 객체에 접근하여 데이터를 공유하고 사용할 수 있습니다.

이는 데이터나 객체 등을 중복으로 생성하지 않기에 자원 낭비를 방지하고, 메모리 사용을 최적화할 수 있습니다.



효율성

일반적으로 처음 사용될 때 객체를 생성하며, 이후에는 생성된 객체를 재사용하므로 반복적인 생성으로 인한 오버헤드를 줄여줍니다.





주의점

지나치게 많은 데이터를 Singleton을 통해 저장하면 메모리 누수나 부하가 발생할 수 있으며, 코드의 복잡성이 증가할 수 있으니 적절하게 사용하는 것이 중요합니다!

또한 Singleton이 아니어도 Flutter에서는 Provider, BLoC 패턴 등 다양한 상태 관리 패키지가 있으므로 상황에 따라 상태 관리 패키지 사용을 고려 후 필요에 따라 적용하는 것이 좋습니다.









사용 예시

Singleton Class 예제

class SingletonTest {
  // 유일한 객체를 저장하는 private 변수
  static final SingletonTest _instance = SingletonTest._internal();

  // 단일 객체 반환을 위해 factory 키워드 사용
  factory SingletonTest() => _instance;
  
  
  // 테스트를 위한 변수
  String text = "Singleton Text";

  SingletonTest._internal(){
    print("생성되었습니다.");
  }
}

클래스 생성

객체가 한 번만 생성되도록 구현합니다.


Instance 생성 및 반환

클래스에서 유일한 객체를 생성하고, 필요할 때마다 해당 객체를 반환하는 정적 메서드를 구현합니다.




객체 사용 예제

void main() {
  // Singleton 객체 생성
  SingletonTest singleton1 = SingletonTest();
  SingletonTest singleton2 = SingletonTest();

  // 두 객체가 동일한지 확인
  print(identical(singleton1, singleton2)); // true

  // 데이터 변경과 접근
  print(singleton1.text); // "Singleton Text"
  singleton2.text = "text Change!!";
  print(singleton1.text); // "text Change!!"
}

사용 예제를 통해 SingletonTest 클래스를 두 번 생성하여 비교 시 같은 객체임을 알 수 있으며 변수 값이 공유됨을 확인할 수 있습니다!



profile
드문드문 기초 정보를 올리는 블로그

0개의 댓글