🐦 Flutter

Flutter 생명주기

ji-hyun 2022. 7. 5. 21:53

Flutter Life Cycle

 

Widget 이론

플러터에는 Widget 단위로 개발이 된다. 이 Widget 은 불변의 법칙을 갖고 있으며

변경이 필요하면 기존 위젯을 삭제해버리고 완전히 새로운 위젯으로 대체한다. 이것이 플러터의 기본 원칙이다.

 

Container(color: Colors.red)
Container(color: Colors.blue)

 

예를 들어, 위처럼 Container 위젯의 color 를 red -> blue 로 바꿔었다고 해서

이는 기존 위젯을 바꾼 것이 아니라 삭제 후 새로운 위젯으로 만든 것이다.

 

 

 

 

 

 

 

Life Cycle 이란

"생명 주기" 라는 단어 뜻에서 볼 수 있듯이 플러터에서는 위젯이 생성되고 사라질 때까지의 주기 를 관찰 해볼 것이다.

플러터에서는 대표적인 위젯 Stateless Widget, Stateful Widget 이렇게 두 개가 있다.

 

 

 

 

 

 

 

1. Stateless Widget 라이프 사이클

 

constructor --> build

 

Stateless Widget 은 construtor 로 위젯이 생성이 되고 build 함수가 실행된다.

만약 color 등 변경이 필요하다면 위의 위젯 이론에서 본 것처럼 위젯을 삭제 후 새로운 위젯으로 만들어버린다.

 

즉, 하나의 Stateless Widget 은 생성되고 나면 단 한번만 build 함수를 실행한다고 볼 수 있다.

 

 

 

 

 

 

 

 

2. Stateful Widget 라이프 사이클

 

 

StatefulWidget 을 처음 생성하면 위와 같은 모습이다.

이는 StatefulWidgetState 두 개의 클래스가 처음 생성된 것이다.

 

 

StatefulWidget 은 이름 그대로 "상태를 관리할 수 있는 위젯" 이므로 StatelessWidget 은 위젯이 생성되고 죽어버리는 것에 비해, StatefulWidget 은 상태를 변경할 수 있도록 build 를 여러번 실행 해주어야 하는 차이점으로 알면 된다.

 

 

 

 

그런데 위젯 이론이 기억나는가?

위젯은 불변하다는 원칙을 갖고 있다. 따라서 StatefulWidget 는 불변한 위젯이다.

위에서 StatefulWidget 은 상태를 변경할 수 있다고 말했는데 위젯은 불변하다니.. 앞 뒤가 안 맞을 수 있다.

그래서 State 클래스를 사용하게 되는 것이다.

 

 

 

 

정리

StatefulWidget 은 불변의 법칙을 따르고 있는 StatefulWidget 와  불변의 법칙을 따를 필요가 없는 State 즉, 두 개의 클래스로 구성이 된다

 

 

 

 

StatefulWidget 의 생명주기를 한번 살펴보자.

 

StatefulWidget : Constructor --> createState

State: initState --> didChangeDependencies --> dirty --> Build --> clean --> deactivate --> dispose

 

createState

State 를 만든다.

 

 

initState

State 가 생성이 되고 나면 initState 가 불린다.

이름 그대로 State 를 초기화하는 메서드이며

그래서 State 가 생성이 될 때 딱 한번만 불린다. 

 

 

didChangeDependencies 

그 다음 didChangeDependencies 메서드가 불린다.

나중에 알아볼 것이니 지금은 넘어가자.

아무튼 이 메서드가 불리고 나면 상태는 dirty 한 상태가 된다.

dirty 한 상태라는 뜻은 "변경이 필요한 상태" 와 같은 뜻이다.

 

 

Build

상태가 dirty 한 상태가 되면 Build 함수가 불려지게 된다.

그렇게 되면 이때 위젯이 화면에 그려지게 되는 것이다.

그리고 상태는 다시 clean 상태로 돌아가게 된다.

 

 

dispose

deactivate 는 잘 사용하지 않는 것이니 dispose 를 설명하면

이는 위젯이 사라질 때를 의미한다.

뒤로 갈때.. 이럴 때를 의미한다고 보면 된다.

 

 

 

여기까지가 StatefulWidget 의 생명주기이다. (= 위젯이 생성되고 사라지기까지)

 

 

그럼 만약 상태를 변경한다면 생명주기가 어떻게 달라질까?

 

 

 

 

 

상태 변경의 생명 주기

1. 파라미터가 바뀌었을 때 생명주기

 

StatefulWidget : Constructor 

State: didUpdateWidget --> dirty --> Build --> clean

 

파라미터가 바뀐다는 뜻은 color 를 red 에서 blue 로 파라미터를 바꿔서 전해주게 되는 경우.. 등을 말함

 

파라미터가 바뀌면 역시 위젯은 삭제되어야 한다.

왜 삭제되어야 하냐고? 다시 위에 읽고 와...

위젯은 불변하니까!!!!

 

 

Construtor

그래서 StatefulWidget 은 Constructor 로 다시 생성 해준다.

그러나 createState 가 실행되지 않는다. 실행되지 않고 기존의 State 클래스를 찾게 된다.

 

 

didUpdateWidget 

변경된 값이 있으므로 상태는 dirty 한 상태가 된다.

이를 다시 Build 를 실행시켜주어서 상태를 clean 하게 바꿔 주어야 한다.

 

 

 

 

 

2. setState 를 실행했을 때 생명주기

 

setState 는 State 에서 특별히 제공하는 함수이다.

위의 1 과의 차이점은 외부에서 파라미터를 받는 것이 아닌 State 내부에서 변경이 되는 것이다.

 

State: setState --> dirty --> Build --> clean

 

setState 가 실행이 되고 Build 를 자체적으로 실행해버려서 상태를 clean 하게 만들어준다.

이 기능 때문에 우리가 StatefulWidget 을 많이 사용하게 된다.

 

 

 

 

 

처음에 플러터의 생명주기가 리액트를 하던 나로써는 와닫지 않은 내용이었는데 그래도 이렇게 한번 공부하고 나면서 원리를 알게 되니까 조금 알게 되는 것 같았다. 

 

 

 

 

 

 

인프런 강의 "[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!" 을 참고하여 글을 작성하였습니다.

 

 

 

'🐦 Flutter' 카테고리의 다른 글

[Flutter] 자동 생성 JSON 직렬화 코드와 비교  (0) 2022.08.20
Dart Named Constructor  (0) 2022.08.12
[Flutter] json 파싱 정보글 모음  (0) 2022.06.24
dart 비동기 프로그래밍  (0) 2022.06.02
dart 함수형 프로그래밍  (0) 2022.05.31