플러터(Flutter)는 구글에서 개발한 크로스 플랫폼 모바일 앱 개발 프레임워크입니다. 플러터는 Dart 언어를 사용하여 iOS와 Android 앱을 동시에 개발할 수 있게 해주는 강력한 기능을 제공합니다. 이번 글에서는 플러터에서 Injectable이라는 라이브러리를 활용하여 모듈 간 인터페이스를 구현하는 방법에 대해 알아보겠습니다.
1. Injectable 소개
Injectable은 Dart 언어에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 의존성 주입은 앱의 모듈 간의 의존성을 관리하여 코드의 재사용성과 테스트 용이성을 향상시킵니다.
2. 모듈 간 인터페이스 구현 방법
2.1. 의존성 주입을 위한 Injectable 라이브러리 추가
먼저 Flutter 프로젝트의 pubspec.yaml
파일에 injectable 라이브러리를 추가해야 합니다. 아래의 코드를 dependencies
섹션에 추가하세요.
dependencies:
injectable: ^1.3.0
2.2. 인터페이스 정의하기
의존성 주입을 위해 사용할 인터페이스를 정의해야 합니다. 예를 들어, 데이터베이스와 통신하는 UserRepository 인터페이스를 만들어 보겠습니다. lib/repositories/user_repository.dart
파일을 생성하고 아래의 코드를 작성하세요.
abstract class UserRepository {
Future<User> getUser();
void saveUser(User user);
}
2.3. 의존성 주입을 위한 모듈 설정
의존성 인스턴스를 등록해주는 모듈을 생성해야 합니다. lib/di/injector.dart
파일을 생성하고 아래의 코드를 작성하세요.
@Injectable(as: UserRepository)
class UserRepositoryImpl implements UserRepository {
@override
Future<User> getUser() {
// 사용자 정보를 데이터베이스에서 가져오는 로직 작성
}
@override
void saveUser(User user) {
// 사용자 정보를 데이터베이스에 저장하는 로직 작성
}
}
위의 코드에서 @Injectable(as: UserRepository)
어노테이션은 UserRepositoryImpl 클래스가 UserRepository 인터페이스를 구현함을 선언합니다.
2.4. 의존성 주입 시 사용
이제 UserRepository 인터페이스를 사용하는 클래스에서 의존성을 주입할 수 있습니다. 예를 들어, lib/screens/user_screen.dart
파일에서 UserRepository를 사용한다고 가정해보겠습니다.
class UserScreen extends StatelessWidget {
final UserRepository userRepository;
const UserScreen({required this.userRepository});
@override
Widget build(BuildContext context) {
return FutureBuilder<User>(
future: userRepository.getUser(),
builder: (context, snapshot) {
// 사용자 정보를 화면에 표시하는 로직 작성
},
);
}
}
위의 코드에서 UserScreen
클래스의 생성자에서 UserRepository
를 주입받고, build
메서드에서 userRepository
를 사용하여 사용자 정보를 가져오고 화면에 표시하는 로직을 구현합니다.
3. 결론
위에서 살펴본 것처럼, 플러터에서 Injectable을 활용하여 모듈 간 인터페이스를 구현하는 방법을 알아보았습니다. Injectable 라이브러리를 사용하면 의존성 주입을 쉽게 구현할 수 있으며, 코드의 재사용성과 테스트 용이성을 향상시킬 수 있습니다. 추가적인 자세한 내용은 Injectable의 공식 문서를 참고하시기 바랍니다.
- Injectalbe 라이브러리: https://pub.dev/packages/injectable
- Dart 언어: https://dart.dev/
- 플러터(Flutter): https://flutter.dev/