[flutter] 플러터의 Inject와 Injectable의 개념과 차이점

플러터는 Google에서 개발한 크로스 플랫폼 애플리케이션 개발 프레임워크로써, 개발자들이 다양한 플랫폼에서 동작하는 일관된 앱을 빠르게 개발할 수 있도록 지원합니다. 이번에는 플러터에서 자주 사용되는 Inject와 Injectable의 개념과 차이점에 대해 알아보겠습니다.

Inject란?

Inject는 의존성 주입(Dependency Injection)을 구현하기 위해 사용되는 패키지입니다. 의존성 주입은 애플리케이션의 여러 컴포넌트 사이에서 종속성을 관리하기 위해 사용되는 디자인 패턴입니다. 이를 통해 컴포넌트 간의 결합도를 낮추고 유연성을 높일 수 있습니다.

Inject 패키지는 클래스를 주입 가능한(dependency injectable) 형태로 만들어줍니다. 클래스 내부에 @injectable 어노테이션을 추가하여 해당 클래스를 주입 가능한 클래스로 지정할 수 있습니다. 이렇게 주입 가능한 클래스는 다른 클래스에서 생성자나 필드, 메서드 등을 통해 인스턴스를 주입받을 수 있습니다.

Injectable이란?

Injectable은 Inject 패키지를 사용하여 의존성 주입을 좀 더 편리하게 구현하기 위한 추가 패키지입니다. Injectable을 사용하면 Inject 패키지에서 제공하는 주입 가능한 클래스 작성 방법에 비해 더 간결하고 간편하게 의존성 주입을 구현할 수 있습니다.

Injectable 패키지를 사용하기 위해서는 get_it 패키지도 함께 사용해야 합니다. get_it은 의존성 주입 컨테이너를 제공하며, 클래스의 인스턴스를 싱글톤으로 관리합니다. Injectable을 사용하여 주입 가능한 클래스를 작성할 때는 @Injectable() 어노테이션을 클래스 위에 추가하면 됩니다.

Injectable 패키지는 런타임 시 클래스를 생성하고 의존성 주입을 자동으로 처리합니다. 예를 들어, 주입 가능한 클래스를 생성할 때 해당 클래스를 생성하여 컨테이너에 등록하고, 다른 클래스에서 해당 주입 가능한 클래스를 필요로 할 때 컨테이너에서 인스턴스를 가져와 자동으로 주입해줍니다.

Inject와 Injectable의 차이점

Inject 패키지와 Injectable 패키지는 모두 플러터에서 의존성 주입을 구현하기 위해 사용되지만, 사용 방법과 코드의 간결성 측면에서 차이가 있습니다.

Inject 패키지는 클래스를 주입 가능한 형태로 만들어주는 역할을 합니다. 클래스 내에 @injectable 어노테이션을 추가해야 하고, 주입 가능한 클래스를 생성하고 의존성을 수동으로 주입해야 합니다.

반면에 Injectable 패키지는 Inject 패키지를 보완하여 의존성 주입을 더 간결하게 구현할 수 있도록 도와줍니다. Injectable 패키지는 @Injectable() 어노테이션을 클래스 위에 추가하면 런타임시 자동으로 클래스를 생성하고 의존성을 자동으로 주입해줍니다.

결론

Inject와 Injectable은 플러터에서 의존성 주입을 구현하기 위해 사용되는 패키지입니다. Inject 패키지는 클래스를 주입 가능한 형태로 만들어주고, Injectable 패키지는 의존성 주입을 더 간결하게 구현할 수 있도록 도와줍니다. 선택은 개발자에게 달려있으며, 프로젝트의 크기와 복잡도에 따라 적합한 패키지를 선택하여 사용하면 됩니다.

더 자세한 정보를 찾고 싶으시다면 아래 문서들을 참고하시면 됩니다.