[flutter] 플러터에서 Injectable을 활용하여 앱의 로직과 UI의 분리

플러터는 구글에서 개발한 모바일 애플리케이션 개발 프레임워크로, 단일 코드베이스로 안드로이드 및 iOS 앱을 개발할 수 있습니다. 하지만 대규모 애플리케이션의 경우, 로직과 UI를 분리하여 유지 보수성과 코드의 재사용성을 높일 필요가 있습니다. 이를 위해 Injectable이라는 라이브러리를 활용할 수 있습니다.

1. Injectable이란?

Injectable은 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있도록 도와주는 플러터 패키지입니다. 의존성 주입은 앱의 여러 컴포넌트 간의 의존성을 외부에서 주입하는 디자인 패턴으로, 코드의 테스트 용이성과 유지 보수성을 향상시킬 수 있습니다.

2. Injectable 사용 방법

Injectable을 사용하기 위해서는 아래 단계를 따라야 합니다.

2.1. 의존성 주입할 클래스 생성

의존성 주입할 클래스를 생성합니다. 예를 들면, UserRepository 클래스를 생성하고, 사용자 정보를 가져오는 getUser() 메서드를 만들겠습니다.

class UserRepository {
  Future<User> getUser() async {
    // 사용자 정보를 가져오는 로직
  }
}

2.2. Injectable 어노테이션 사용

Injectable 어노테이션을 사용하여 해당 클래스가 의존성 주입이 필요한 클래스임을 알려줍니다.

@Injectable()
class UserRepository {
  Future<User> getUser() async {
    // 사용자 정보를 가져오는 로직
  }
}

2.3. 의존성 주입할 클래스 등록

의존성 주입할 클래스를 등록합니다. 이를 위해 main 함수에서 getIt.registerSingleton() 메서드를 사용하겠습니다.

void main() {
  getIt.registerSingleton<UserRepository>(UserRepository());
  runApp(MyApp());
}

2.4. 의존성 주입 사용

의존성 주입할 클래스를 사용하려면, getIt.get() 메서드를 사용하여 해당 클래스의 인스턴스를 가져옵니다. 예를 들면, MyApp 클래스에서 UserRepository를 사용하여 사용자 정보를 가져오겠습니다.

class MyApp extends StatelessWidget {
  final UserRepository userRepository = getIt.get<UserRepository>();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 앱의 구성
    );
  }
}

3. 결론

위의 예제를 통해 플러터에서 Injectable을 활용하여 앱의 로직과 UI를 분리하는 방법을 알아보았습니다. Injectable을 사용하면 코드의 테스트 용이성과 유지 보수성을 향상시킬 수 있으며, 대규모 애플리케이션 개발에 많은 도움이 됩니다.

참고: Injectable 공식 문서