본문 바로가기

# 02/Flutter

[Flutter] StatelessWidget / StatefulWidget 생명 주기

반응형

Stateless Widget 생명 주기

 

Stateless Widget은 상태 변화가 없는 위젯으로 생명주기는 간단하게 다음과 같다.

 

  1. 위젯 생성: build() 메서드가 최초 호출될 때 생성된다.
  2. build() 메서드 호출: build() 메서드는 Flutter Framework에서 UI를 그리기 위해 호출된다.
  3. UI 그리기: build() 메서드에서 정의한 UI가 화면에 그려진다.
  4. 위젯 소멸: 위젯이 더 이상 필요하지 않을 때 소멸된다.

 

Stateless Widget은 간단하게 build() 메서드만 호출하면 된다. build() 메서드가 호출될 때마다 새로운 위젯을 생성하지 않고 기존 위젯을 재사용한다.

 

 

 

 

Stateful Widget 생명 주기

 

Stateless Widget 과 달리 Stateful widget 은 생명주기가 좀 더 복잡하고 앱을 개발하는데 있어서 모르면 안되는 중요 부분이다.

 

  • createState()
    • Stateful Widget 객체를 생성하면 생성자가 호출되고 이 메서드가 호출된다. Stateful Widget 에서 필수적으로 오버라이드 해야 하는 메서드이다. 이 메서드의 역할은 State 객체를 생성하는 일이다.
  • initState()
    • State 객체가 생성되면 State 객체의 생성자가 호출된다. 이렇게 위젯이 최초 생성되는 상황이면 이 메서드가 호출된다. 처음 한 번만 호출되는 함수이다. 여기서 데이터나 속성값을 초기화 할 수 있다.
  • didChangeDependencies()
    • initState() 다음에 실행되는 메서드. 추가적으로 위젯이 의존하는 데이터의 객체가 호출될 때 호출 되기도 한다. Inherited Widget 을 사용하는 경우가 대표적이라고 할 수 있다.
  • build()
    • build()를 통해서 위젯이 그려진다. State 클래스에서 반드시 오버라이딩 되어야 하는 메서드이다. 예를 들어 버튼을 클릭 할 때나 어떠한 액션을 취할 때 계속 실행되는 함수이다.
  • setState()
    • State 객체의 상태가 변경되었다는 것을 프레임워크에 알리는 용도이다. 따라서 State 객체의 상태가 변경될 때마다 setState() 함수를 통해서 알려야 한다. 그래야만 프레임워크가 build() 함수가 호출할 준비를 한다.
  • didUpdateWiget()
    • 부모 위젯이 재 빌드되어 위젯이 갱신될 때 호출된다. didUpdateWiget()이 호출된 후에는 항상 build()를 호출한다. 따라서 만약 didUpdateWiget() 내에서 setState() 를 호출하면 build() 중복 호출이 된다.
  • deactivate()
    • 트리에서 State 객체가 제거될 때마다 호출된다. 어떤 경우에는 프레임워크가 제거된 State 객체를 트리의 다른 부분에 다시 삽입하기도 한다. 이 경우에는 State 객체가 트리의 새로운 위치에 적응할 수 있는 기회를 주기 위해 build()를 호출한다.
  • dispose()
    • 해당 위젯이 위젯트리에서 제거됐을 때 실행된다. 더이상 빌드되지 않는다는 의미이다.
  • reassemble()
    • hot reload 를 실행하면 reassemble()이 호출된다. reassemble() 이 호출되면 build()도 호출이 된다.

 

반응형