상세 컨텐츠

본문 제목

Flutter 위젯 생명주기 이해: build 메서드는 언제 호출될까?

flutter

by 강정_DEV 2026. 7. 7. 09:39

본문

728x90

Flutter 위젯 생명주기란?

Flutter를 사용하여 앱을 개발하다 보면 화면이 어떻게 그려지는지, 상태가 바뀔 때 어떤 과정이 일어나는지 궁금해질 때가 있습니다. Flutter에서 화면에 보이는 모든 요소는 '위젯(Widget)'으로 이루어져 있습니다. 그중에서도 상태를 관리하는 StatefulWidget은 고유한 생명주기(Lifecycle)를 가집니다.

생명주기를 이해한다는 것은 위젯이 생성되고, 화면에 표시되고, 상태가 변경되고, 마지막으로 사라지기까지의 과정을 파악하는 것입니다. 특히 build 메서드가 언제 호출되는지 아는 것은 앱의 성능 최적화를 위한 첫걸음입니다.

StatefulWidget의 주요 생명주기 메서드

StatefulWidget은 크게 createState를 통해 상태 객체를 생성하며 시작됩니다. 이후 State 클래스 내에서 다음과 같은 흐름을 가집니다.

  1. createState(): 위젯이 생성될 때 호출됩니다.
  2. initState(): 위젯이 트리에 처음 삽입될 때 한 번 호출됩니다. 초기화 작업(데이터 가져오기, 컨트롤러 설정 등)을 수행합니다.
  3. didChangeDependencies(): 위젯의 의존성이 변경될 때 호출됩니다. initState 직후에도 한 번 호출됩니다.
  4. build(): UI를 그리는 핵심 메서드입니다. 위젯이 화면에 나타날 때마다 호출됩니다.
  5. setState(): 상태 변경을 알리고 build를 다시 호출하도록 트리거합니다.
  6. dispose(): 위젯이 트리를 떠나 영구적으로 제거될 때 호출됩니다. 메모리 누수를 방지하기 위해 사용합니다.

build 메서드는 언제 호출될까?

많은 개발자가 build 메서드가 예상보다 자주 호출된다고 느낍니다. 이는 Flutter의 렌더링 방식 때문입니다. build 메서드는 다음과 같은 상황에서 호출됩니다.

  • 위젯이 처음으로 위젯 트리에 삽입될 때
  • setState()가 호출되어 상태 변경을 프레임워크에 알릴 때
  • 부모 위젯의 설정이 변경되어 자식 위젯이 다시 빌드되어야 할 때
  • didChangeDependencies() 호출 직후

간단한 예제 코드

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

class _MyWidgetState extends State<MyWidget> {
  int _counter = 0;

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

  @override
  Widget build(BuildContext context) {
    print('build 호출됨');
    return ElevatedButton(
      onPressed: () {
        setState(() {
          _counter++;
        });
      },
      child: Text('카운트: $_counter'),
    );
  }
}

위 코드를 실행하고 버튼을 누르면, setState가 호출될 때마다 콘솔에 'build 호출됨'이 출력되는 것을 확인할 수 있습니다.

주의사항 및 성능 최적화

build 메서드는 UI를 렌더링하는 매우 빈번한 작업 공간입니다. 따라서 다음과 같은 점을 유의해야 합니다.

  • 무거운 연산 금지: build 메서드 내부에서 복잡한 데이터 처리나 API 호출을 수행하지 마세요. 화면이 버벅거리는 원인이 됩니다.
  • 순수 함수 유지: build 메서드는 동일한 입력(상태)에 대해 항상 동일한 위젯을 반환해야 합니다. 외부 상태에 의존하는 로직은 지양하는 것이 좋습니다.
  • setState 남발 방지: 필요한 부분에서만 setState를 호출하여 불필요한 전체 빌드를 방지하세요.

정리

Flutter 위젯의 생명주기는 앱의 안정성과 성능을 결정짓는 핵심 요소입니다. build 메서드는 상태가 변경될 때마다 호출되는 UI 갱신 창구라는 점을 기억하세요. 더 복잡한 앱을 만들수록 각 생명주기 메서드가 언제 호출되는지 정확히 파악하고 적절한 위치에서 코드를 실행하는 습관이 중요합니다.

참고 자료


🤖 이 글은 생성형 AI(Google Gemini)가 주제 선정 → 자료 조사 → 초안 작성 → AI 검수 과정을 거쳐 자동으로 작성했습니다. 사실과 다른 내용이 포함될 수 있으니 참고용으로 확인해 주세요.

반응형

관련글 더보기

댓글 영역