본문 바로가기
  • 안녕하세요,,, 안녕히가세요,,,,
프로그램/flutter

Flutter] Stateless와 Stateful Widget 그리고 상태관리

by 차보루타 2023. 10. 20.

Flutter 내에서 UI의 기본 단위는 Widget으로 이루어진다.

 

보이는 대부분의 것이 Widget이고 Widget에 Widget을 쌓거나 더해서 화면을 구성한다. 

 

 

 

state는 말 그대로 상태를 뜻하는데, 선언형 프로그래밍에서 많이 쓰이는 개념이다.

 

상태에 따라서 행위를 결정하고 보여준다.

 

 

 

하지만 이건 개념적인 내용이고... 실 사용시 고려해야 할점과는 초점이 다르다.

 

Stateless Widget 은 말 그대로 상태가 불변하는 위젯이다.

Stateful Widget은 말 그대로 상태가 변하는 위젯이다.

 

하지만 State와 관련되어 있기 때문에 상태관리를 도입한 이후부터는 개념이 조금 달라질 수 있다.

 

Stateful Widget은 상태가 항상 변할 수 있기 때문에 디바이스의 리소스를 많이 잡아먹게 된다.

반대로, Stateless Widget은 상태가 변하지 않기 때문에 리소스를 비교적 적게 잡아먹는다.

 

예를 들면 어떤 Button을 눌렀을 때, Text의 내용이 바뀐다고 할 때, Button의 onPress 함수 내에 setState 함수를 이용해 state를 변경시켜 주어야하는데, setState함수는 같은 클래스 내에 있는 Widget을 모두 한번 새로고침 되버린다.

setState는 stateful Widget에서 사용이 가능하고, 한번 사용할때 마다 많은 Widget이 상태변화를 겪게 된다.

 

하지만 riverpod이나 bloc등의 상태관리 라이브러리를 이용한다면 바뀌는 하나의 Widget만을 바꿔줄 수 있다. 이 경우 Stateless Widget을 사용해 상태 변화가 가능하고, 리소스도 조금 덜 소모된다.

 

 

이런 관점에서 봤을때, 

Stateless Widget은 사용자가 직접적으로 바꿀 수 없는 Widget이라고 볼 수 있고,

Stateful Widget은 사용자가 직접적으로 바꿀 수 있는 Widget이라고 볼 수도 있다.

 

물론 상황에 따라 달라질 순 있겠지만 내가 생각하기에는 이렇다.

 

상태 관리 도입 후에는 Stateless를 우선적으로 사용하고, TextField 처럼 안되는 경우만 Stateful을 적용시키는게 좋다.

댓글