본문 바로가기

Flutter/State Management

[GETX] GetX- 종속성 관리: Binding

Binding


Binding 관리는 의존성, 종속성 관리라고 부른다.

효율적인 메모리를 관리하기 위해서는 인스턴스 시킨 객체를 사용하고, 사용하지 않을 때는 없애주는 과정이 필요하다.

이러한 과정을 효율적으로 도와줄 수 있는게 Binding이다.

 

Getx에서는 Binding을 지원하고 있으며 굉장히 효율적이고 간단하게 Binding을 관리 할 수 있다!

 

그럼 어떻게 Binding 관리를 할 수 있을까?

 

#1. Page를 이동할 때 binding을 함께 넘겨준다.

 

페이지를 이동할 때 binding을 함께 넘겨줄 수 있다.

 

코드를 보면서 살펴보자!

Get.to(
  GetPutPage(),
  binding: BindingsBuilder(() {
    Get.put(DependencyController());
  }),
);

 

아래와 같이 Get.to()로 페이지를 이동할 때 binding을 함께 넘겨줄 수 있다. 

그러면 해당 Page에서 넘겨준 인스턴스를 사용할 수 있게 되는 것이다.

 

 

#2. GetPage에서의 binding

 

가장 처음 main.dart 에서 페이지 별로 미리 설정해두는 것도 가능하다.

 

 getPages: [
   GetPage(name: '/', page: () => Home()),
   GetPage(
     name: '/binding',
     page: () => BindingPage(),
     binding: BindingsBuilder<CountControllerWithGetx>(() {
       Get.put(() {
         return CountControllerWithGetx();
       });
     }),
   ),
],

 

GetPage에서 미리 binding을 설정할 수 있고, 안할 수도 있다.

 

매번 BindingBuilder를 사용하기 귀찮으면 따로 Binding Class를 만들어서 넣어줘도 된다. (필자는 보통 이 방법을 선호한다.)

 

#3. Binding Class 만들기

 

Class는 Bindings를 상속시키고,

dependencies 내에서 BindingBuilder 없이 Get.put() or Get.lazyPut()을 해주면 된다.

 

import 'package:get/get.dart;

class Binding implements Bindings {
  @override
  void dependencies() {
    Get.put(CountControllerWithGetx());
  }
}

 

그리고 이러한 Class를 만들었으면 GetPage의 binding 부분에 Class를 넣어주기만 하면 종속성을 EASY하게 관리할 수 있다.

 

GetPage(
  name: '/binding',
  page: () => BindingPage(),
  binding: Binding(),            // 이렇게!
),

 

 

Summary


1. Get.to - Page 이동할 때 

2. GetPage - routes 설정할 때

 

Binding을 설정할 수 있다. -> 각 페이지마다 종속성 관리!

 

 

(+) 여담


여담으로 Binding을 설정하고 Page를 넘어갔는데 넘어간 Page에서 이전의 페이지에서 사용된 인스턴스를 사용하지 않는다고 할 때에 해당 인스턴스가 메모리에서 사라질 것이라고 생각했지만,, 그렇지 않았다.

 

필요하지 않는 인스턴스를 없애려면 특수한 경우 Delete()를 해서 없애던가

아니면 페이지 스택에서 Get.ofAll 등을 사용해서 해당 인스턴스를 사용하는 모든 페이지를 없애야만 그제서야 해당 인스턴스가 메모리 상에서 사라진다! 

 

즉, 페이지만 넘어간다고 해서 인스턴스가 사라지는 것은 아니다!

'Flutter > State Management' 카테고리의 다른 글

[GETX] Binding 관리 Get.lazyPut  (0) 2021.12.20
[GETX] GetX - 라우팅 관리  (0) 2021.12.07
[GETX] BottomSheet 높이 변경하는 방법  (0) 2021.11.30