본문 바로가기

Flutter-플러터/플러터 공부

Get x 3편 - 종속성 관리

반응형

코딩을 공부하면서 때때로 한자를 공부하는 느낌이 든다. 

네이버 어학사전에서는 종속성을 아래와 같이 설명한다. IT용어인데 한자도 있다....소름

종속성
[ dependency음성듣기 , 從屬性 ]

관계 모델에서 다른 실체 또는 속성이 존재하는 경우에 한하여 어떤 실체 또는 속성의 존재 의의가 있음을 의미하는 실체 간 또는 속성 간의 관련 관계. 관계 모델에서는 데이터 구조를 형식화하는 경우에 하나의 관계 중에 포함되는 몇 가지 속성 간 사상(寫像)의 성질(종속 관계)이 중요하다. 종속 관계에는 함수 종속성, 결합 종속성, 다치 종속성, 추이 종속성 등이 있다.

[네이버 지식백과] 종속성 [dependency, 從屬性] (IT용어사전, 한국정보통신기술협회)

 

어렵다. 그래서 내 식대로 정리해본다. 

 

나는 음식점을 운영하고 있다. 콩나물 불고기, 찜닭을 판다. 

각 메뉴마다 같은 매콤과 간장 양념을 쓰고 있다. 고로 나의 메뉴는 매콤 콩불, 간장 콩불, 매콤 찜닭, 간장 찜닭 이렇게 4가지를 판매하는 것이다. 그렇다면 위 4가지 음식을 할 때를 코드로 변환하면 

 

클래스 매콤 콩불 

변수 돼지고기 

함수 매콤양념장을 넣고 끓인다. 



클래스 간장 콩불

변수 돼지고기

함수 간장양념장을 넣고 끓인다. 



클래스 매콤 찜닭

변수 닭고기 

함수 간장양념장을 넣고 끓인다. 



클래스  간장 찜닭

변수 닭고기 

함수 매콤양념장을 넣고 끓인다.

 

이렇게 코드를 짤 수 있겠다. 보면 반복적인 변수나 함수가 보인다.  이것을 인스턴스화 해서 클래스에 종속시켜 보면 아래와 같이 보다 더 간결한 코드를 만들 수 있게 된다. (솔직히 이게 맞는지 두렵다. 지나가는 개발자님 알려주세요 )

 

함수 매콤 = 매콤 양념을 넣고 볶는다
함수 간장 = 간장 양념을 넣고 볶는다
변수 돼지= 돼지고기
변수 닭= 닭고기 



클래스 메뉴 

 매콤 콩불

  변수 돼지

  함수 매콤


 간장 콩불

  변수 닭

  함수 간장


 매콤 찜닭

  변수 닭 

  함수 매콤



 간장 찜닭 

  변수 닭 

  함수 간장

 

 

 

기존의 플러터에서 제공하는 종속성 관리에 효과적인 Provider context, inheritedWidget 방법이 있다. 하지만 코드가 길다. 

Get x 는 짧다. 

 

Get.put

가장 일반적인 방법 

Get.put<SomeClass>(SomeClass());
Get.put<LoginController>(LoginController(), permanent: true);
Get.put<ListItemController>(ListItemController, tag: "some unique string");

 

Get.lazyPut

인스턴스하게 사용하는 경우에만 의존성을 lazyLoad 할 수 있습니다. 계산 비용이 많이 드는 클래스나 한곳에서 다양한 클래스를 당장 사용하지 않으면서 인스턴스화 하기를 원한다면(Bindings 클래스처럼) 매우 유용합니다.

/// ApiMock은 처음으로 Get.find<ApiMock>을 사용하는 경우에만 호출됩니다.
Get.lazyPut<ApiMock>(() => ApiMock());

Get.lazyPut<FirebaseAuth>(
  () {
    // 어떤 로직이 필요하다면 ...
    return FirebaseAuth();
  },
  tag: Math.random().toString(),
  fenix: true
)

Get.lazyPut<Controller>( () => Controller() )

 

Get.putAsync

만약 비동기로 인스턴스를 등록하길 원하면 Get.putAsync를 사용할 수 있습니다.:

Get.putAsync<SharedPreferences>(() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setInt('counter', 12345);
  return prefs;
});

Get.putAsync<YourAsyncClass>( () async => await YourAsyncClass() )

 

Get.find

 

final controller = Get.find<Controller>();
// OR
Controller controller = Get.find();

// 그렇습니다. 마법 같아요. Get은 controller를 찾고 배달해 줍니다.
// Get은 백만개의 contrller를 인스턴스화해서 가질수 있고 항상 올바르게 전달해 줍니다.

 

 

후아 어렵다. 

바인딩이라는 개념도 있지만 그건 천천히 공부해야겠다. 

일단은 여기까지

728x90
반응형

'Flutter-플러터 > 플러터 공부' 카테고리의 다른 글

final const  (0) 2022.10.25
Get X 4편 - 테마 변경  (0) 2022.10.14
Get x 2편 - Get x의 상태관리에 대해  (1) 2022.10.11
Get X 1편 - Get X에 대해  (0) 2022.10.09
MVC, MVVM 패턴이란?  (1) 2022.10.06