지식

Flutter 생명주기 완벽 이해: 위젯의 생성부터 소멸까지 한눈에 정리

Flutter 생명주기란 무엇인가?

**Flutter 생명주기(Lifecycle)**란, 앱 실행 중 위젯이 생성되고 사라지기까지의 전 과정을 의미합니다.
즉, Flutter 프레임워크가 화면에 위젯을 렌더링하고 상태를 관리하는 일련의 단계죠.
이 개념을 정확히 이해하면 불필요한 리빌드(rebuild)를 줄이고, 성능 최적화에도 큰 도움이 됩니다.


StatelessWidget의 생명주기

StatelessWidget은 이름 그대로 상태(State)가 없는 위젯입니다.
한 번 생성되면 변경되지 않으며, 다음 단계만 거칩니다.

  1. build() → 화면 렌더링
  2. 이후 상태 변경 불가

예를 들어, 단순한 텍스트나 아이콘 같은 고정 UI에 적합합니다.

class HelloText extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text('Hello Flutter!');
  }
}

StatefulWidget의 생명주기

StatefulWidget은 상태가 변할 수 있는 위젯입니다.
이 위젯은 State 객체를 가지며, 다음과 같은 생명주기 단계를 거칩니다.

createState()

State 객체를 생성합니다. 위젯이 처음 화면에 등장할 때 한 번만 호출됩니다.

initState()

초기화 로직을 처리합니다. 예를 들어, API 요청이나 컨트롤러 초기화 등을 수행합니다.

super.initState()는 반드시 호출해야 합니다.

build()

UI를 렌더링하는 단계입니다. 상태가 변경되면 이 메서드가 다시 호출되어 화면을 갱신합니다.

didUpdateWidget()

부모 위젯이 변경되었을 때 호출되어, 위젯 상태를 새로 동기화합니다.

deactivate()

위젯이 위젯 트리에서 제거되기 전에 호출됩니다.

dispose()

리소스 해제 단계입니다. Controller, Stream 등을 정리해야 메모리 누수를 방지할 수 있습니다.

class CounterWidget extends StatefulWidget {
  @override
  State<CounterWidget> createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  int _count = 0;

  @override
  void initState() {
    super.initState();
    print('initState 호출!');
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () => setState(() => _count++),
      child: Text('$_count'),
    );
  }

  @override
  void dispose() {
    print('dispose 호출!');
    super.dispose();
  }
}

Flutter 생명주기의 활용 포인트

initState() : API 호출, 초기 데이터 로딩
build() : 상태 변경 시 UI 업데이트
dispose() : 리소스 정리, 메모리 관리
didChangeAppLifecycleState() : 앱의 포그라운드/백그라운드 상태 감지

예를 들어, 아래처럼 WidgetsBindingObserver를 통해 앱 전체 생명주기를 감시할 수도 있습니다.

class AppLifecycleObserver extends State<MyApp> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print('현재 앱 상태: $state');
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }
}

정리: Flutter 생명주기를 알면 코드가 달라진다

Flutter 생명주기는 단순히 위젯이 만들어지고 사라지는 과정이 아닙니다.
앱 성능, 리소스 효율성, 상태 관리의 핵심이 되는 로직입니다.
초보 개발자라면 initState → build → dispose 순서를 명확히 익히는 것부터 시작해보세요.
이 구조를 이해하면 상태 관리 패턴(Provider, BLoC, Riverpod) 도 훨씬 자연스럽게 익힐 수 있습니다.


결론

Flutter 생명주기는 앱의 안정성과 성능을 결정짓는 핵심 개념입니다.
위젯의 생성부터 소멸까지의 흐름을 정확히 이해하면, Flutter 개발의 효율성과 유지보수성이 극대화됩니다.
지금 바로 자신의 코드에서 initState, build, dispose가 어떻게 작동하는지 점검해보세요.

eorbaos1985

Recent Posts

Aluminium OS – 구글의 차세대 Android 기반 PC OS

Aluminium OS - Android가 PC로 향하는 이유와 의미 2025년 말, 구글이 내부 코드명 “Aluminium”로 불리는…

3개월 ago

2026년 기준중위소득 100% · 120% — 1~4인 가구 기준 완전정리

1. 2026년 기준중위소득이란? 2026년 기준중위소득은 대한민국 전체 가구의 중간 소득을 의미하며, 정부의 다양한 복지사업과 지원제도의…

3개월 ago

한국, 월드컵 2포트 진입 추진! 월드컵 2포트의 장단점 총정리

월드컵 2포트 진입, 왜 이렇게 중요한가? 한국 축구 대표팀이 월드컵 2포트 진입을 목표로 국제 A매치를…

3개월 ago

플러터 스키아 엔진 완전 이해: 왜 플러터는 스키아로 빠른 UI를 만드는가

플러터 스키아 엔진 완전 이해: 왜 플러터는 스키아로 초고속 UI를 구현할까 플러터(Flutter)는 단 하나의 코드베이스로…

3개월 ago

플러터 그리드 위젯 완벽 가이드: GridView로 반응형 UI 만들기

플러터 그리드 위젯 완벽 가이드 플러터(Flutter)는 하나의 코드베이스로 iOS, Android, Web까지 동시에 빌드할 수 있는…

3개월 ago

연세대 AI 컨닝 사태 전말과 파장 — 대학 교육 윤리에 던진 경고

1. 사건 개요 — 연세대 중간고사에서 벌어진 AI 컨닝 2025년 11월 초, 연세대학교 신촌캠퍼스의 한…

3개월 ago