[flutter] 플러터에서의 앱 라이프사이클 이해 방법

플러터는 구글에서 개발한 UI 프레임워크로, 안드로이드와 iOS 앱을 개발하기 위해 사용됩니다. 플러터에서는 StatelessWidget과 StatefulWidget을 사용하여 UI를 구성하며, 이러한 위젯들은 앱의 라이프사이클을 관리하는데 중요한 역할을 합니다.

StatefulWidget의 라이프사이클

StatefulWidget은 상태를 가지는 위젯으로, 사용자 인터랙션이나 다른 이벤트에 따라 상태를 변경할 수 있습니다. StatefulWidget의 라이프사이클은 다음과 같은 단계로 이루어집니다:

  1. create: StatefulWidget이 생성될 때 호출됩니다. 초기화 작업을 수행하는 데 사용될 수 있습니다.
  2. initState: StatefulWidget이 처음 빌드될 때 호출됩니다. 초기 데이터를 가져오거나 초기화를 수행하는 데 사용됩니다.
  3. didChangeDependencies: StatefulWidget의 의존성이 변경될 때 호출됩니다. 주로 데이터의 업데이트에 사용됩니다.
  4. build: StatelessWidget의 build 메서드와 비슷하게 실행되며, 위젯을 빌드합니다.
  5. didUpdateWidget: 위젯의 속성이 변경될 때 호출됩니다. 상태 변화에 따라 UI를 업데이트하는 데 사용될 수 있습니다.
  6. deactivate: StatefulWidget이 위젯 트리에서 제거될 때 호출됩니다. 재사용될 때 다시 initState가 호출됩니다.
  7. dispose: StatefulWidget이 영구적으로 제거될 때 호출됩니다. 리소스 해제 등의 정리 작업을 수행하는 데 사용됩니다.

StatelessWidget의 라이프사이클

StatelessWidget은 상태를 가지지 않는 위젯으로, 한 번 빌드되면 그 상태는 변경되지 않습니다. 따라서 StatelessWidget에는 StatefulWidget의 라이프사이클과는 달리 초기화나 데이터 업데이트와 같은 단계가 없습니다.

StatelessWidget의 라이프사이클은 다음과 같습니다:

  1. create: StatelessWidget이 생성될 때 호출됩니다. 초기화 작업을 수행하는 데 사용될 수 있습니다.
  2. build: 위젯을 빌드하는 메서드입니다. 위젯은 한 번 빌드되면 이후에는 변경되지 않으므로, build 메서드가 호출되기만 하면 됩니다.
  3. dispose: StatelessWidget이 영구적으로 제거될 때 호출됩니다. 리소스 해제 등의 정리 작업을 수행하는 데 사용됩니다.

라이프사이클 메서드 사용 예시

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  @override
  void initState() {
    super.initState();
    // 초기화 작업 수행
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    // 데이터 의존성 변경 시 작업 수행
  }

  @override
  void didUpdateWidget(covariant MyWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    // 위젯의 속성이 변경될 때 작업 수행
  }

  @override
  void dispose() {
    // 리소스 해제 등의 정리 작업 수행
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    // 위젯 빌드
    return Container();
  }
}

위 코드에서는 StatefulWidget을 상속하여 _MyWidgetState 클래스를 정의하고, 라이프사이클 메서드를 오버라이드하여 필요한 작업을 수행하고 있습니다. 초기화 작업은 initState()에서 수행하며, 데이터 의존성 변경이나 위젯 속성 변경은 각각 didChangeDependencies()didUpdateWidget()에서 처리됩니다. 마지막으로 dispose()에서 리소스 해제 작업을 수행합니다.

결론

플러터에서는 StatefulWidget과 StatelessWidget을 사용하여 앱의 라이프사이클을 관리합니다. StatefulWidget은 상태 변화를 다루며, 각각의 라이프사이클 단계에서 필요한 작업을 수행할 수 있습니다. StatelessWidget은 상태가 없으므로 초기화나 데이터 업데이트와 같은 단계가 없습니다. 앱을 개발할 때 이러한 라이프사이클 메서드를 올바르게 활용하여 앱의 동작을 원하는 대로 제어할 수 있습니다.

참고: Flutter 문서 - 위젯 라이프사이클