플러터에서 build
메서드는 위젯의 핵심적인 역할을 담당한다. 이 메서드는 위젯이 화면에 어떻게 표시될지를 결정하고, 실제 UI를 생성하는 역할을 한다.
build
메서드는 BuildContext
를 하나의 파라미터로 받는다. 이로 인해 생성되는 컨텍스트(Context)는 특정 위젯의 위치와 관련된 정보를 담고 있는 중요한 객체인데, 위젯이 현재 어떤 환경에 있는지, 어떤 기능을 사용할 수 있는지 등을 파악하는 데 사용된다. 쉽게 말해, 자식 위젯이나 부모 위젯과의 관계를 정의하는 객체라 보면 되겠다. 그래서, 만약 위젯의 상대적인 위치가 변화하면 컨텍스트 또한 변한다.
이 BuildContext
를 통해 테마나 미디어 쿼리, 내비게이터에 접근할 수 있다.
final theme = Theme.of(context); // 테마 데이터 접근
final mediaQuery = MediaQuery.of(context); // MediaQuery 데이터 접근
build
메서드는 반드시 하나의 위젯을 반환해야 한다. 그리고 이 반환된 위젯이 화면에 표시될 UI의 일부가 된다. build
는, 위젯이 처음 생성될 때, StatefulWidget
의 상태가 변화할 때, InheritedWidget
이 변경되어 이를 참조하는 다른 위젯들이 리렌더링될 때 호출된다. build
는 자식 위젯들의 build
를 재귀적으로 호출하여 최종적인 UI를 렌더링한다.
class MyWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
color: Colors.blue,
child: Center(
child: Text(
"Hello, Flutter!",
style: TextStyle(color: Colors.white),
),
),
);
}
}
build
를 사용할 때 주의할 점은, 자주 호출되기 때문에 성능에 주의해야 한다는 점이다. 그래서 복잡한 계산이나 비동기 작업은 build
메서드 외부에서 처리하고, 결과 값만 build
메서드에서 사용하는 것이 좋은 습관이다. 추가적으로, 앞에 const
키워드를 사용하여 불필요한 위젯 재생성을 막을 수도 있다.