플러터는 사용자 인터페이스를 구축하기 위한 크로스 플랫폼 개발 프레임워크입니다. Flutter에서 코드의 재사용성과 모듈화를 위해 의존성 주입(Dependency Injection)을 사용하는 경우가 많습니다. 이때 사용되는 주요한 라이브러리 중 하나는 ‘inject’와 ‘injectable’입니다. 이 포스트에서는 플러터에서 ‘inject’와 ‘injectable’의 동작 원리를 알아보겠습니다.
Inject란?
‘Inject’는 의존성 주입을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이 라이브러리를 사용하면, 의존성을 가진 객체들을 간단히 주입할 수 있습니다. 그렇게 함으로써 코드의 유연성과 재사용성을 높일 수 있습니다. ‘Inject’는 기본적으로 코드 생성을 통해 의존성 주입을 처리합니다.
Injectable이란?
‘Injectable’은 ‘Inject’ 라이브러리를 사용하기 위한 어노테이션입니다. 이 어노테이션은 생성자나 필드, 메서드에 적용될 수 있습니다. ‘Injectable’을 사용하면 해당 요소가 주입 가능한 의존성을 가짐을 알리는 역할을 합니다. 즉, ‘Injectable’ 어노테이션이 적용된 요소는 다른 클래스에서 주입될 수 있게 됩니다.
동작 원리
-
먼저, ‘injectable’ 라이브러리를 사용하기 위해 프로젝트에 의존성을 추가해야 합니다. 이를 위해
pubspec.yaml
파일에injectable
패키지를 추가하고,pub get
명령을 실행하여 패키지를 다운로드 받아야 합니다. -
다음으로, ‘injectable’ 라이브러리의 기능을 사용하기 위해 해당 클래스 또는 요소에
@Injectable()
어노테이션을 추가합니다. 예를 들어, 클래스에 적용할 경우:@Injectable() class MyService { // ... }
필드에 적용할 경우:
class MyClass { @Injectable() MyService myService; }
메서드에 적용할 경우:
class MyClass { @Injectable() void myMethod(MyService myService) { // ... } }
-
의존성을 주입해야 하는 객체를 사용할 때는, 해당 요소를 생성자 매개변수로 선언하거나 필드에 직접 주입합니다. 예를 들어, 생성자를 통한 주입:
class MyClass { MyService myService; MyClass(this.myService); }
필드에 직접 주입:
class MyClass { @Injectable() MyService myService; }
이처럼 ‘injectable’ 라이브러리를 사용하면 플러터 프로젝트에서 쉽게 의존성 주입을 구현할 수 있습니다. 이렇게 함으로써 코드의 유지보수성과 재사용성을 향상시킬 수 있습니다.
마무리
이번 포스트에서는 플러터의 ‘inject’와 ‘injectable’ 라이브러리의 동작 원리에 대해 알아보았습니다. 이를 통해 플러터 프로젝트에서 의존성 주입을 쉽고 효율적으로 구현할 수 있게 되었습니다. 일관된 코드 스타일과 모듈화를 통해 플러터 앱을 보다 효과적으로 개발할 수 있습니다.