의존성 주입은 앱 개발에서 중요한 개념 중 하나입니다. 의존성 주입은 앱 컴포넌트 간의 의존성을 외부에서 주입하여 코드의 재사용성과 테스트 용이성을 높여줍니다.
Flutter에서는 다양한 의존성 주입 라이브러리들이 있지만, 이 예제에서는 Riverpod를 사용한 의존성 주입 방법을 알아보겠습니다.
Riverpod란?
Riverpod는 상태 관리 라이브러리인 Provider의 새로운 버전입니다. Provider의 개선된 버전으로, 의존성 주입을 좀 더 간편하고 직관적으로 구현할 수 있게 해줍니다.
설치
Riverpod를 사용하기 위해서는 프로젝트의 pubspec.yaml
파일에 다음과 같이 의존성을 추가해야 합니다.
dependencies:
flutter:
sdk: flutter
riverpod: ^1.0.0
예제 코드
이제 Riverpod를 사용하여 의존성 주입을 하는 예제를 살펴보겠습니다. 이 예제에서는 UserRepository
와 UserNotifier
를 의존성 주입하고, 위젯 트리에 제공하는 방법을 알아보겠습니다.
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class UserRepository {
String getCurrentUser() {
// 현재 사용자를 가져오는 비즈니스 로직
return "John Doe";
}
}
class UserNotifier extends ChangeNotifier {
final UserRepository _userRepository;
UserNotifier(this._userRepository);
String get currentUser => _userRepository.getCurrentUser();
}
final userRepositoryProvider = Provider<UserRepository>((ref) {
return UserRepository();
});
final userNotifierProvider = ChangeNotifierProvider<UserNotifier>((ref) {
final userRepository = ref.watch(userRepositoryProvider);
return UserNotifier(userRepository);
});
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ProviderScope(
child: MaterialApp(
title: 'Flutter Riverpod Example',
home: Scaffold(
appBar: AppBar(
title: Text('User Management'),
),
body: Consumer(
builder: (context, watch, _) {
final userNotifier = watch(userNotifierProvider);
final currentUser = userNotifier.currentUser;
return Center(
child: Text(
'Current User: $currentUser',
style: TextStyle(fontSize: 18),
),
);
},
),
),
),
);
}
}
void main() {
runApp(MyApp());
}
위 예제 코드에서 UserRepository
는 실제 사용자 데이터를 처리하는 비즈니스 로직을 담고 있습니다. UserNotifier
는 UserRepository
를 의존성으로 받아와서 사용자 데이터에 관련된 상태 관리를 합니다.
userRepositoryProvider
는 Provider<UserRepository>
로, UserNotifier
에서 사용할 UserRepository
를 제공합니다. userNotifierProvider
는 ChangeNotifierProvider<UserNotifier>
로, UserNotifier
의 인스턴스를 생성하고 UserRepository
를 주입하여 제공합니다.
MyApp
위젯에서는 ProviderScope
로 userNotifierProvider
가 사용 가능하도록 설정합니다. 그리고 Consumer
위젯 안에서 userNotifierProvider
를 감지하고 현재 사용자 데이터를 가져오는 로직을 수행합니다.
결론
이 예제에서는 Riverpod를 사용하여 Flutter에서 의존성 주입을 어떻게 구현하는지 배웠습니다. Riverpod는 Provider과 같은 상태 관리 라이브러리를 사용하면서 의존성 주입을 더욱 간편하고 유지보수하기 좋게 만들어줍니다. 앱 개발에서 의존성 주입을 효율적으로 사용하여 개발의 생산성을 높여보세요.