[flutter] 플러터에서 다른 클래스에 의존성 주입하는 방법

의존성 주입은 객체 간의 결합도를 낮추는 디자인 패턴으로, 플러터 앱 개발에서도 많이 사용됩니다. 다른 클래스에 의존성을 주입하여 코드의 유지 보수성과 테스트 용이성을 향상시킬 수 있습니다. 이번 포스트에서는 플러터에서 다른 클래스에 의존성을 주입하는 방법에 대해 알아보겠습니다.

1. 의존성 주입란?

의존성 주입(Dependency Injection)은 객체 간의 의존 관계를 개발자가 직접 관리하는 것이 아니라, 프레임워크나 라이브러리가 의존성을 주입하는 방식입니다. 이를 통해 객체들 간의 결합도를 낮추고, 재사용성과 유연성을 높일 수 있습니다.

2. 플러터에서 의존성 주입하기

플러터에서 의존성 주입을 사용하기 위해 다음과 같은 단계를 따를 수 있습니다:

단계 1: 의존성 주입 라이브러리 추가하기

플러터 프로젝트에 의존성 주입을 사용하기 위해 먼저 의존성 주입 라이브러리를 추가해야 합니다. 일반적으로 get_it 또는 provider와 같은 라이브러리를 사용합니다.

pubspec.yaml 파일에 아래와 같은 의존성을 추가합니다:

dependencies:
  get_it: ^5.0.4

의존성을 추가한 후에는 flutter pub get 명령을 실행하여 의존성을 설치합니다.

단계 2: 의존성 주입을 받을 클래스 생성하기

의존성을 주입할 클래스를 생성합니다. 예를 들어, AuthService라는 로그인 서비스가 있다고 가정해봅시다.

class AuthService {
  final ApiService _apiService;

  AuthService(this._apiService);

  // AuthService에서 ApiService의 메소드를 사용할 수 있습니다.
  // ...
}

AuthService의 생성자 파라미터로 ApiService를 받아와 의존성을 주입받을 수 있도록 만들었습니다.

단계 3: 의존성 주입하기

의존성을 주입할 클래스를 등록하고 사용할 곳에서 주입받습니다.

void main() {
  // GetIt을 이용해 의존성 주입을 등록합니다.
  GetIt.instance.registerLazySingleton(() => ApiService());
  GetIt.instance.registerLazySingleton(() => AuthService(GetIt.instance.get<ApiService>()));

  runApp(MyApp());
}

위 예시에서는 GetIt을 사용하여 ApiServiceAuthService를 등록하고, AuthService에서 ApiService를 주입받도록 설정하였습니다.

단계 4: 의존성 사용하기

등록된 의존성을 사용하는 곳에서 GetIt을 이용해 의존성을 주입받아 사용할 수 있습니다.

class LoginPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final authService = GetIt.instance.get<AuthService>();

    return Scaffold(
      // ...
    );
  }
}

위 예시에서는 GetIt.instance.get<AuthService>()를 통해 AuthService의 인스턴스를 가져와 사용하고 있습니다.

3. 결론

이번 포스트에서는 플러터에서 다른 클래스에 의존성을 주입하는 방법에 대해 알아보았습니다. 의존성 주입은 코드 유지 보수성과 테스트 용이성을 향상시키는데 큰 도움이 됩니다. get_it과 같은 의존성 주입 라이브러리를 사용하면 간편하게 의존성을 주입하고 사용할 수 있습니다.