개인 공부/플러터

State 란 무엇일까?

Sanyo 2024. 5. 18. 14:23

State는 앱에서 사용되는 data를 의미한다.

 

플러터에는 2개의 state가 있다.

  • App state
  • Widget state
  1. App stateApp state는 앱 전반에 걸쳐 사용되는 data이다. App state를 변경해서 전반적으로 데이터 수정을 할 수 있을 것이다.
  2. Widget stateWidget state는 이름에서 알 수 있듯이 한 Widget 내에서 사용하는 데이터를 의미한다. 특정 위젯 내에서만 필요하고 다른 위젯에는 필요하지 않을 때 사용한다.

Flutter를 처음 배울 때도 이 state를 접하게 될 것이다. 바로 StatelessWidget과  StatefulWidget을 본 적이 있을 것이다.

 

<StatelessWidget>

StatelessWidget은 state가 없는 widget이다. data가 아예 없다는 의미는 아니고,

변경할 data가 없다고 이해하면 편하다.

 

<StatefulWidget>

State가 존재하는 Widget이다. 내부 데이터가 변경되면 그를 바탕으로 화면을 다시 그릴 수 있다.

 

 

먼저 StatelessWidget을 살펴보자.

class TestStatelessWidget extends StatelessWidget{

  int number = 0;
  @override
  Widget build(BuildContext context) {
    throw UnimplementedError();
  }
}

여기서 number의 값이 변할 수 있기에 오류까지는 아니지만 경고가 표시된다.

어처피 number의 값이 변한다고 해도 StatelessWidget에서는 변경된 데이터를 반영하지 않기에,

소용없기 때문이다.

 

경고를 없애려면

final int number = 0;

이런 식으로 정의해야 한다.

 

다음으로 StatefulWidget을 살펴보자.

StatefulWidget은 2개의 클래스로 이루어져 있다.

바뀌는 부분과 바뀌지 않는 부분.

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  @override
  Widget build(BuildContext context){
    return Container(
      
    );
  }
}

위 코드를 살펴보자.

 

변화가 생기면 _TestState에서 다시 Test로 올려보내고, Test가 새로 받은 위젯을 보여준다.

createState를 사용해서 서로 연결하고, _TestState는 State를 통해 연결한다.