[Flutter] 플러터에서 GetX와 Stateful 위젯

24.04.25 16:47 작성 조회수 14

0

안녕하세요 선배님들,

현직에서 플러터를 도입하여 단독 개발을 하고 있는 주니어입니다.

저는 현재 상태관리로 GetX를 도입해서 쓰고 있습니다. 아키텍쳐는 MVVM으로 쓰고 있습니다. 상태가 변할 필요가 있는 위젯의 경우에는 obx로 감싸서 변경이 필요한 부분만 반영시키고 있고, 상위는 Stateless로 생성하고 있습니다.

뷰모델에서 변수와 리스트를 관리하고 있는데, 포커스노드나 텍스트필드 컨트롤러가 필요한 스크린의 경우에는 문득 해당 스크린이 아님에도 다른 스크린에서 같은 뷰모델을 쓰게 되면, 불필요하게 텍스트필드 컨트롤러와 포커스노드가 생성되지 않을까 라는 생각이 들었습니다.

이런 경우, Stateful로 생성해서 해당 파일 내에서 포커스노드와 컨트롤러를 생성하고 관리하는 방식이 적합할까요 ?

글이 두서가 없어서 죄송합니다.

 

요약 : GetX + MVVM을 쓰는데 텍스트필드 컨트롤러와 포커스 노드를 뷰모델 안에서 생성할지, 아니면 해당 스크린을 stateful로 생성해서 스크린 내에서 생성을 하는게 적합할지

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.26

안녕하세요, 인프런 AI 인턴입니다.

좋은강의파인더님, 플러터와 GetX, MVVM 아키텍쳐를 사용하면서 상태 관리에 대해 질문하셨군요. GetX와 MVVM을 사용하는 경우, UI의 상태 변화를 관리하기 위해 Obx를 사용하고 계시는 것으로 이해됩니다. 텍스트 필드 컨트롤러와 포커스 노드와 같이 UI 요소의 상태를 관리해야 하는 부분에 대해서는, 상태 관리의 범위와 객체의 생명주기를 고려할 필요가 있습니다.

뷰모델 안에서 텍스트 필드 컨트롤러와 포커스 노드를 생성하는 방식은 뷰모델이 해당 UI 요소들의 상태를 직접 관리할 수 있게 해서 데이터와 UI 상태의 일관성을 유지하기 쉽게 합니다. 하지만 말씀하신 대로 다른 스크린에서 같은 뷰모델을 사용할 때 불필요한 객체가 생성될 수 있으며, 이는 메모리 사용량 측면에서 비효율적일 수 있습니다.

반면, 해당 스크린을 Stateful 위젯으로 생성하고 그 안에서 텍스트 필드 컨트롤러와 포커스노드를 관리하는 방식은, 각 스크린의 상태가 독립적으로 관리됨으로써 다른 스크린과의 상태 간섭을 줄일 수 있습니다. 또한, 스크린 별로 필요한 UI 상태만을 관리함으로써 자원 사용의 효율성을 높일 수 있습니다.

결론적으로, 스크린 내에서 UI 요소의 상태를 관리해야 한다면 Stateful 위젯 내에서 포커스노드와 컨트롤러를 생성하고 관리하는 방식이 더 적합할 수 있습니다. 이 방식은 메모리 사용 최적화와 각 스크린의 독립성을 보장하는 장점이 있습니다.

언제나 상황과 요구 사항에 따라 가장 적합한 설계 선택이 중요하므로, 앱의 구체적인 사용 사례와 성능 요구 사항을 고려하여 결정하는 것이 좋습니다.