[Flutter/dart] Singleton Factory 싱글톤 끄적끄적

houndhollis·2024년 1월 6일
1
post-thumbnail

기분 좋은 주말 아침, 새벽에 공부한거 끄적여 보기 👀

싱글톤

flutter 에서 싱글톤은 단일 인스턴스만을 갖도록 하는 객체 디자인 패턴을 말한다 어플리케이션에서 하나만 생성되고, 필요한 경우에 이 인스턴스에 접근하여 데이터를 공유하거나 상태를 유지하는데 사용된다

코드로 보겠다 !

class SingletonData {
  SingletonData.internal();
  static final _singleton = SingletonData.internal();

  String title = '';

  void clearTitle() {
    title = '';
  }

  factory SingletonData() {
    return _singleton;
  }
}

프라이빗 생성자 _singlton 변수가 SingletonData.internal() 생성자를 통해 초기화가 된다 이 생성자는 클래스 외부에서 호출 될 수 없도록 private 으로 선언되었다.

또한 factory 키워드를 사용하여 클라이언트가 직접 생성자를 호출 하지 않도록 만들어줬다. 인스턴스 변수 title 를 가지고 있어서 이 변수는 외부에서 직접 접근이 가능하며, clearTitle 메서드를 통해 초기화 시킬수 있다.

싱글톤 인스턴스 반환은 factory SingletonData() 메소드를 통해 동일한 인스턴스가 반환되기 때문에 단일 데이터 객체를 유지할수 있다. 하지만 싱글톤 패턴은 남용되지 않도록 주의해야 하며, 필요한 경우에만 사용하는 것이 좋다

사용하기

import 'package:flutter/material.dart';
import 'package:flutter_laboratory/singleton/singleton_data.dart';

class HomeScreenSingleTon extends StatefulWidget {
  const HomeScreenSingleTon({super.key});

  @override
  State<HomeScreenSingleTon> createState() => _HomeScreenSingleTonState();
}

class _HomeScreenSingleTonState extends State<HomeScreenSingleTon> {
  TextEditingController teEditingController = TextEditingController();
  SingletonData singletonData = SingletonData();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SingleTon'),
        backgroundColor: Colors.grey.shade200,
        elevation: 1.0,
      ),
      body: Padding(
        padding: EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: teEditingController,
            ),
            const SizedBox(height: 16.0),
            Row(
              children: [
                Expanded(
                  child: ElevatedButton(
                    onPressed: () {
                      setState(() {
                        singletonData.title = teEditingController.text;
                      });
                    },
                    child: const Text('Save'),
                  ),
                ),
                const SizedBox(width: 12),
                Expanded(
                  child: ElevatedButton(
                    onPressed: () {
                      setState(() {
                        singletonData.clearTitle();
                      });
                    },
                    child: const Text('Clear'),
                  ),
                ),
              ],
            ),
            const SizedBox(height: 12),
            Center(
              child: Text(
                singletonData.title,
                style: TextStyle(
                  fontSize: 30,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
  SingletonData singletonData = SingletonData();

로직을 통해 싱글톤 인스턴스에 접근이 가능하며

로직을 시뮬에 띄우면

이런 뷰가 보여지고
입력 한 후 Save 버튼을 누르면
저장 된 후, Clear를 통해 지울수가 있다.

간단하게 싱글톤에 대해 학습을 해봤다. 오늘은 여기까지..!

profile
한 줄 소개

0개의 댓글