flutter의 context에 대해 알아보겠습니다. Flutter에서 “context”는 매우 중요한 개념입니다. Flutter의 각 위젯은 트리 구조 안에서 위치하며, 각각의 위치는 해당 위젯의 “context”로 표현됩니다. 이 context는 위젯이 위치한 트리의 정보를 담고 있으며, 여러 가지 중요한 작업에 사용됩니다.
주요 사용 사례
- 네비게이션: Navigator를 사용해 다른 화면으로 이동할 때, 현재의 context가 필요합니다. 이를 통해 현재 화면의 위치와 관련된 작업을 수행할 수 있습니다.
- InheritedWidget 검색: InheritedWidget은 트리를 통해 데이터를 전달하는 방법을 제공합니다. 예를 들어, Theme.of(context)나 MediaQuery.of(context) 같은 호출을 통해 context를 사용하여 현재 테마나 화면 크기 같은 정보를 가져올 수 있습니다.
- 상태 관리: 상위 위젯으로부터 받은 정보나 상태를 하위 위젯이 사용할 때, 하위 위젯은 context를 통해 이러한 정보에 접근합니다.
이해하기
- 위치 기반: Context는 위젯이 위젯 트리에서 어디에 위치해 있는지를 나타냅니다. 따라서, 특정 위젯의 context는 그 위젯과 그의 모든 하위 위젯들에 대한 위치 정보를 포함합니다.
- 유일성: 각 위젯은 고유한 context를 갖습니다. 이는 위젯이 트리 내에서 자신의 위치를 식별하는 데 사용됩니다.
주의점
- 범위: 하위 위젯은 그들의 상위 위젯의 context에 접근할 수 없습니다. 각각의 context는 오직 해당 위젯과 그의 자식들에게만 접근 가능합니다.
- 생명주기: 위젯의 생명주기 동안 context는 변경될 수 있습니다. 따라서, context에 의존하는 작업은 위젯의 생명주기를 고려하여 안전하게 수행되어야 합니다.
InheritedWidget 특징
Flutter의 InheritedWidget은 위젯 트리를 통해 데이터를 효율적으로 전달하는 메커니즘을 제공합니다. 이것은 주로 위젯 트리의 상위 레벨에서 데이터를 정의하고, 이 데이터를 하위 레벨의 여러 위젯들이 접근할 수 있도록 하는 데 사용됩니다.
- 데이터 공유: InheritedWidget을 사용하면 상위 위젯이 정의한 데이터를 하위 위젯들이 쉽게 접근할 수 있습니다. 예를 들어, 애플리케이션의 테마나 로케일 정보와 같은 것들을 전체 앱에서 접근 가능하게 만들 수 있습니다.
- 효율적인 데이터 접근: 일반적으로 데이터를 전달하기 위해서는 위젯 트리를 통해 명시적으로 데이터를 전달해야 합니다. 하지만 InheritedWidget을 사용하면, 이러한 명시적인 데이터 전달 없이도 하위 위젯이 필요한 데이터에 접근할 수 있습니다.
- 컨텍스트 기반 검색: 하위 위젯은 자신의 BuildContext를 사용하여 가장 가까운 InheritedWidget의 인스턴스를 찾고, 그로부터 데이터를 얻을 수 있습니다. 예를 들어, Theme.of(context)는 현재 context를 기반으로 가장 가까운 Theme 인스턴스를 찾아 해당 테마 데이터를 반환합니다.
- 성능 최적화: InheritedWidget은 오직 필요한 부분의 위젯 트리만을 재구축합니다. 만약 상속받은 데이터가 변경되면, 그 데이터에 의존하는 위젯들만이 재구축되어 성능이 최적화됩니다.
이러한 방식으로 InheritedWidget은 Flutter에서 데이터 공유 및 접근성을 향상시키는 중요한 역할을 합니다.