[flutter] 플러터에서 Inject와 Injectable의 동작 원리

플러터는 사용자 인터페이스를 구축하기 위한 크로스 플랫폼 개발 프레임워크입니다. Flutter에서 코드의 재사용성과 모듈화를 위해 의존성 주입(Dependency Injection)을 사용하는 경우가 많습니다. 이때 사용되는 주요한 라이브러리 중 하나는 ‘inject’와 ‘injectable’입니다. 이 포스트에서는 플러터에서 ‘inject’와 ‘injectable’의 동작 원리를 알아보겠습니다.

Inject란?

‘Inject’는 의존성 주입을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이 라이브러리를 사용하면, 의존성을 가진 객체들을 간단히 주입할 수 있습니다. 그렇게 함으로써 코드의 유연성과 재사용성을 높일 수 있습니다. ‘Inject’는 기본적으로 코드 생성을 통해 의존성 주입을 처리합니다.

Injectable이란?

‘Injectable’은 ‘Inject’ 라이브러리를 사용하기 위한 어노테이션입니다. 이 어노테이션은 생성자나 필드, 메서드에 적용될 수 있습니다. ‘Injectable’을 사용하면 해당 요소가 주입 가능한 의존성을 가짐을 알리는 역할을 합니다. 즉, ‘Injectable’ 어노테이션이 적용된 요소는 다른 클래스에서 주입될 수 있게 됩니다.

동작 원리

  1. 먼저, ‘injectable’ 라이브러리를 사용하기 위해 프로젝트에 의존성을 추가해야 합니다. 이를 위해 pubspec.yaml 파일에 injectable 패키지를 추가하고, pub get 명령을 실행하여 패키지를 다운로드 받아야 합니다.

  2. 다음으로, ‘injectable’ 라이브러리의 기능을 사용하기 위해 해당 클래스 또는 요소에 @Injectable() 어노테이션을 추가합니다. 예를 들어, 클래스에 적용할 경우:

    @Injectable()
    class MyService {
       // ...
    }
    

    필드에 적용할 경우:

    class MyClass {
       @Injectable()
       MyService myService;
    }
    

    메서드에 적용할 경우:

    class MyClass {
      @Injectable()
      void myMethod(MyService myService) {
        // ...
      }
    }
    
  3. 의존성을 주입해야 하는 객체를 사용할 때는, 해당 요소를 생성자 매개변수로 선언하거나 필드에 직접 주입합니다. 예를 들어, 생성자를 통한 주입:

    class MyClass {
      MyService myService;
    
      MyClass(this.myService);
    }
    

    필드에 직접 주입:

    class MyClass {
      @Injectable()
      MyService myService;
    }
    

이처럼 ‘injectable’ 라이브러리를 사용하면 플러터 프로젝트에서 쉽게 의존성 주입을 구현할 수 있습니다. 이렇게 함으로써 코드의 유지보수성과 재사용성을 향상시킬 수 있습니다.

마무리

이번 포스트에서는 플러터의 ‘inject’와 ‘injectable’ 라이브러리의 동작 원리에 대해 알아보았습니다. 이를 통해 플러터 프로젝트에서 의존성 주입을 쉽고 효율적으로 구현할 수 있게 되었습니다. 일관된 코드 스타일과 모듈화를 통해 플러터 앱을 보다 효과적으로 개발할 수 있습니다.

References