[flutter] 플러터에서 Injectable을 활용한 모듈 간 인터페이스 구현 방법

플러터(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의 공식 문서를 참고하시기 바랍니다.