1. Flutter 앱 개발에서 ‘상태’란 무엇을 의미하나요?
- Flutter에서 ‘상태(State)’는 앱의 UI에 영향을 주는 데이터를 의미함.
- 예를 들어, 버튼을 눌렀을 때 숫자가 증가하는 카운터 앱에서 숫자가 0 → 1 → 2로 변하는 것이 상태의 변화임.
- 상태는 크게 **변하는 상태(Stateful)와 변하지 않는 상태(Stateless)**로 나뉨.
- StatefulWidget을 사용하면 상태가 변경될 때 setState()를 호출해 UI를 다시 그림.
2. ListView, ListView.builder, SingleChildScrollView + Column 3가지의 차이점은?
- ListView: 모든 아이템을 한 번에 렌더링함 → 많은 아이템을 다룰 때 성능 저하.
- ListView.builder: 필요한 아이템만 그릴 때마다 렌더링(지연 로딩) → 성능이 훨씬 좋음.
- SingleChildScrollView + Column: 리스트가 아니라 단순한 스크롤이 필요한 경우 사용하지만, 내부 위젯이 많아지면 성능 문제가 발생할 수 있음(모든 위젯을 한 번에 로드함).
3. Flutter에서 상수 클래스란 무엇이며 왜 사용하나요?
- 변경되지 않는 값을 정의하는 클래스.
- const 생성자를 사용하면 컴파일 시점에 미리 값을 할당하여 성능을 최적화할 수 있음.
class AppColors {
static const primaryColor = Color(0xFF00FF00);
}
- 이점: 코드 가독성 증가, 메모리 절약.
4. Riverpod 상태관리 패턴의 특징은?
- 의존성 주입(DI)이 기본 내장 → ref.watch(), ref.read()로 의존성을 쉽게 관리 가능.
- 전역 상태 관리 가능 → Provider 객체를 이용해 어디서든 접근 가능.
- 자동 폐기(Dispose) 지원 → 사용되지 않는 상태는 자동으로 정리됨.
- Immutable한 상태 관리 → 상태가 변할 때마다 새로운 객체가 생성되어 예측 가능한 코드 작성 가능.
5. Riverpod 상태관리와 Provider 상태관리의 차이?
- Provider: ChangeNotifier 기반으로 UI가 상태 변경을 감지 → 의존성 주입을 위해 BuildContext 필요.
- Riverpod: BuildContext 없이 동작하며, 전역적인 상태 관리를 더 쉽게 구현할 수 있음.
6. ViewModel의 역할은?
- UI 로직과 비즈니스 로직을 분리하는 역할.
- UI 관련 데이터(상태)를 관리하고, 네트워크 호출 또는 DB 작업 같은 로직을 처리함.
- MVVM 패턴에서 View와 Model을 연결하는 핵심 역할을 담당함.
7. MVVM 패턴이란?
- Model-View-ViewModel의 약자.
- Flutter에서 UI(View)와 비즈니스 로직(Model)을 분리하는 아키텍처 패턴.
- 구성 요소:
- Model: 데이터와 비즈니스 로직 관리
- View: UI를 담당
- ViewModel: Model과 View를 연결, 상태 관리
8. MVVM 패턴의 특징과 장점은?
- 특징:
- UI(View)와 비즈니스 로직(Model)이 분리됨.
- ViewModel이 상태를 관리하여 UI 변경을 최소화.
- 장점:
- 유지보수 쉬움 (UI 변경이 Model에 영향 X).
- 코드 재사용성 증가.
- 테스트 용이 (UI가 독립적이므로 단위 테스트 작성 쉬움).
9. MVVM 패턴과 StatefulWidget의 차이점?
- StatefulWidget은 UI와 상태를 한 곳에서 관리하지만, MVVM은 View와 상태(ViewModel)를 분리하여 관리함.
- MVVM을 사용하면 비즈니스 로직이 UI에 직접 포함되지 않아 유지보수성이 향상됨.
10. Flutter에서 위젯트리란?
- Flutter 앱은 위젯들의 계층 구조(트리)로 구성됨.
- 위젯 트리는 부모-자식 관계를 가지며, 앱 화면을 구성하는 기본 구조를 의미함.
MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('My App')),
body: Column(
children: [
Text('Hello'),
ElevatedButton(onPressed: () {}, child: Text('Click'))
],
),
),
);
- MaterialApp → Scaffold → Column → Text, Button 처럼 트리 구조를 가짐.
11. 위젯이 화면에 그려지기까지의 과정?
- ① 위젯 트리 생성: 위젯을 정의하고 트리를 구성.
- ② Element 트리 생성: 위젯을 화면에 그리기 위한 요소(Element) 트리를 생성.
- ③ RenderObject 트리 생성: 실제 UI를 그릴 때 필요한 렌더링 정보를 포함하는 트리 생성.
- ④ UI 그리기: Flutter 엔진이 RenderObject 트리를 바탕으로 프레임워크를 화면에 렌더링.
- ⑤ 상태 변화 감지 및 업데이트: setState() 호출 시 위젯 트리를 다시 빌드.
12. Flutter에서 BuildContext란?
- 위젯 트리에서 위젯의 위치를 나타내는 정보를 담고 있음.
- context를 이용하면 현재 위젯이 어디에 위치하는지 파악 가능.
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('BuildContext 예제')),
body: Center(
child: ElevatedButton(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('버튼 클릭!'))
);
},
child: Text('Show SnackBar'),
),
),
);
}
}
- ScaffoldMessenger.of(context)를 사용하여 SnackBar를 띄우는 예제.
- context를 사용하면 트리에서 위젯을 찾아 필요한 정보를 가져올 수 있음.
'TIL' 카테고리의 다른 글
Flutter의 Stream에 대해서.. (1) | 2025.01.15 |
---|---|
Flutter의 const 키워드 (0) | 2025.01.15 |
Flutter의 Key는 무엇인가요? (0) | 2025.01.15 |
Dart의 Garbage Collector란? (0) | 2025.01.13 |
클래스 내에서 static 키워드 (0) | 2025.01.10 |