Flutter의 세 가지 트리 구조
개요
Flutter는 UI를 효율적으로 렌더링하기 위해 세 가지 트리 구조를 사용합니다. 이 구조들은 성능 최적화와 재사용성을 위해 설계되었으며, 개발자는 주로 Widget Tree만 직접 다룹니다.
세 가지 트리의 역할
- Widget Tree: 개발자가 작성한 UI 구조 (불변객체)
- Element Tree: Widget과 RenderObject를 연결하는 중간 계층 (상태 유지)
- RenderObject Tree: 실제 화면에 그려지는 객체들 (렌더링 담당)

Widget Tree - 개발자가 작성한 UI 구조

Container(
child: Row(
children: [
Column(
children: [
Icon(Icons.home),
Container(child: Text('홈')),
],
),
Column(
children: [
Icon(Icons.search),
Container(child: Text('검색')),
],
),
],
),
)
Widget Tree는 UI 요소들의 계층적 구조를 나타냅니다. Container 안에 Row가 있고, Row에는 여러 Column이 있으며, 각 Column에는 Icon과 Text가 포함된 Container가 있는 형태입니다.
Element Tree : Element Tree는 Widget Tree의 실제 구현체입니다

- Widget: UI 설계도 (불변 청사진)
- Element: 런타임에서 생성된 살아있는 구조물 (가변 인스턴스)
- 역할: 위치, 타입, 상태를 저장하고 RenderObject와 연결
중요한 특징:
- State 객체는 Element에 의해 관리됩니다
- StatefulWidget은 StatefulElement를, StatelessWidget은 StatelessElement를 가집니다
- Flutter는 성능을 위해 Element와 RenderObject를 재활용합니다
비용 분석
| 구성 요소 | 생성 비용 | 재생성 빈도 |
| Widget | 저렴 | 자주 발생 |
| Element | 높음 | 최소화됨 |
| RenderObject | 높음 | 최소화됨 |
핵심 원리: Widget은 자주 재생성되지만 비용이 저렴하고, Element와 RenderObject는 생성 비용이 높으므로 최대한 재활용합니다.
'Flutter' 카테고리의 다른 글
| Flutter Key 및 상태 관리의 기본 개념 - 성능 최적화 팁 (0) | 2025.08.20 |
|---|---|
| Flutter Key 및 상태 관리의 기본 개념 - Flutter의 Element 재사용 메커니즘 (0) | 2025.08.19 |
| Flutter Gesture (0) | 2025.08.19 |
| dart HTTP 요청과 응답 처리 및 파싱 (0) | 2025.08.19 |
| dart 비동기 프로그래밍 (0) | 2025.08.19 |