-
[Flutter] App Lifecycle (라이프사이클)📖 개발 공부/flutter 2023. 7. 23. 11:58
이전 포스팅에서 Flutter의 Stateless Widget과 Stateful Widget을 알아보았다.
이번엔 상태가 변하는 Stateful Widget을 기준으로 LifeCycle을 살펴보도록 하자!
앱 생명주기(라이프사이클) 단계
앱은 다음과 같은 상태의 LifeCycle을 가진다.
- createState()
- initState()
- didChangeDependencies()
- build()
- didUpdateWidget()
- setState()
- deactivate()
- dispose()
각 단계에 대해 자세히 살펴보자.
createState()
- createState() 메서드는 새로운 Stateful Widget이 생성될 때 호출되는 메서드이다.
- 해당 StatefulWidget과 연결된 State 객체를 생성하여 반환한다.
- 이 메서드는 반드시 오버라이드해야한다.
class HomeScreen extends StatefulWidget { HomeScreen({Key key}) : super(key: key); @override HomeScreenState<StatefulWidget> createState() => HomeScreen(); }
initState()
- initState() 메서드는 위젯이 처음으로 생성될 때 호출되는 메서드이다.
- State 객체의 초기화를 위해 사용된다. 변수 초기화, 스트림 생성, 애니메이션 컨트롤러 설정 등을 할 수 있다.
- 이 메서드는 생성 시 한 번만 호출되며, super.initState()를 호출하여 부모 위젯(StatefulWidget)의 초기화도 수행한다.
- → 상태가 변경되더라도 다시 호출하지 않는다.
@override void initState(){ super.initState(); }
didChangeDependencies()
- didChangeDependencies() 메서드는 initState() 메서드 호출 이후에 호출되는 메서드이다.
- 위젯이 처음으로 생성될 때 한 번 호출되고, 이후 부모 위젯이나 의존성이 변경될 때마다 호출된다.
- 주로, 부모 위젯에 의해 제공되는 데이터에 기반하여 API 호출이나 변수 초기화 등을 수행할 수 있다.
- 공식문서 또한 상속한 위젯이 업데이트 될 때, 네트워크 호출(또는 다른 비용이 큰 액션)이 필요한 경우 유용하다고 한다.
@override void didChangeDependencies() { }
build()
- build() 모든 위젯의 렌더링을 담당하는 가장 중요한 메서드이다.
- 위젯의 UI를 구성하는데 사용되며, 화면에 렌더링되어야 하는 위젯을 반환한다.
- UI를 갱신하거나, hot-reload를 실행할 때마다 이 메서드가 다시 호출된다.
- 데이터가 변경되어 UI를 갱신해야 할 경우, setState() 메서드를 호출하여 해당 위젯의 build()를 다시 호출하도록 알릴 수 있다.
@override Widget build(BuildContext context) { return Scaffold() }
didUpdateWidget()
- didUpdateWidget() 메서드는 부모 위젯이 변경되어 해당 위젯이 다시 빌드될 때 호출된다.
- 부모 위젯이 같은 유형의 새로운 위젯으로 교체될 때 이 메서드가 호출되며, 이전 위젯에서 새로운 위젯으로 변경될 때 활용할 수 있다.
@protected void didUpdateWidget(Home oldWidget) { super.didUpdateWidget(oldWidget); }
setState()
- setState() 메서드는 해당 위젯의 상태(State)가 변경되었음을 프레임워크에 알리는 역할을 한다.
- 상태가 변경되면 build() 메서드를 다시 호출하여 UI를 갱신한다.
- 이를 통해 미세한 업데이트를 수행하여 성능을 향상시킨다.
void function(){ setState(() {}); }
deactivate()
- deactivate() 메서드는 위젯이 현재 위젯 트리에서 제거되었지만, 나중에 다른 위치에 다시 추가될 수 있는 상태일 때 호출된다.
- 주로 Navigator를 사용하여 새로운 화면으로 이동할 때 호출된다.
@override void deactivate(){ super.deactivate(); }
dispose()
- dispose() 메서드는 위젯이 영구적으로 위젯 트리에서 제거될 때 호출된다.
- 위젯과 관련된 자원 해제, 스트림 구독 해제, 애니메이션 컨트롤러 해제 등을 수행한다.
- 위젯이 다시 추가될 때는 위젯의 전체 라이프사이클이 재실행된다.
@override void dispose(){ super.dispose(); }
📎 참고 링크
반응형'📖 개발 공부 > flutter' 카테고리의 다른 글
[Flutter] .env 파일 이용하여 환경변수 관리하기 (0) 2023.10.02 [Flutter] Flutter는 어떻게 동작하는가? (0) 2023.08.05 [Flutter] Stateless Widget / Stateful Widget (0) 2023.07.22 [Flutter] Line Chart 구현하기 (0) 2023.05.07 [Flutter] TabBar, TabBar 정렬 (0) 2023.04.11