[flutter] 플러터 프로바이더를 활용한 비즈니스 로직 처리

플러터(Flutter) 앱을 개발하다 보면 UI 와 비즈니스 로직을 분리하고, 상태 관리를 효율적으로 처리해야 합니다. 프로바이더(Provider)를 활용하면 상태 관리와 비즈니스 로직 처리를 쉽게 할 수 있습니다. 이번 글에서는 프로바이더를 사용하여 비즈니스 로직을 처리하는 방법에 대해 설명하겠습니다.

프로바이더란?

플러터 프로바이더는 상태 관리를 위한 라이브러리로, 상태 변화를 감지하고 UI 를 업데이트하여 바꿉니다. 프로바이더는 상속과 의존성 주입(Dependency Injection)을 기반으로 동작하며, 앱 전반에 걸친 상태를 효율적으로 관리할 수 있도록 도와줍니다.

비즈니스 로직 처리하기

프로바이더를 사용하여 비즈니스 로직을 처리할 때, 먼저 ChangeNotifier 클래스를 상속한 모델 클래스를 만들어야 합니다. 모델 클래스는 해당 비즈니스 로직을 처리하고, 상태를 관리하는 역할을 합니다. 다음은 간단한 카운터 앱의 모델 클래스 예시입니다.

import 'package:flutter/foundation.dart';

class CounterModel with ChangeNotifier {
  int _count = 0;

  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }
}

위 코드에서 CounterModel 클래스는 ChangeNotifier를 상속받아 상태 변화를 감지하고, increment 메서드를 통해 카운트를 증가시키고 변화를 알립니다.

프로바이더 사용하기

프로바이더를 사용하기 위해서는 ChangeNotifierProvider로 해당 모델을 감싸고, Consumer 위젯을 통해 UI 에 반영해야 합니다. 다음은 CounterModel을 사용하는 예시 코드입니다.

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class CounterApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => CounterModel(),
      child: MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: Text('Counter App'),
          ),
          body: Center(
            child: Consumer<CounterModel>(
              builder: (context, counter, child) => Text(
                '${counter.count}',
                style: TextStyle(fontSize: 24),
              ),
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              Provider.of<CounterModel>(context, listen: false).increment();
            },
            child: Icon(Icons.add),
          ),
        ),
      ),
    );
  }
}

ChangeNotifierProviderCounterModel을 감싼 후, Consumer 위젯을 통해 CounterModel의 상태를 받아와 UI 에 반영하고, Provider.of를 통해 상태를 변경할 수 있습니다.

마치며

프로바이더를 활용하여 비즈니스 로직을 처리하면 상태 관리와 UI 업데이트를 간편하게 할 수 있습니다. 프로바이더를 통해 플러터 애플리케이션의 성능과 유지보수성을 높일 수 있으니, 다음 프로젝트에서는 꼭 활용해보시기 바랍니다.