반응형
SMALL
Flutter 개발 과정에서 코드 변경 사항을 적용하는 세 가지 주요 방법인 Hot Reload, Hot Restart, 그리고 전체 재빌드(Stop 후 다시 빌드)는 각각 다른 수준의 앱 상태 초기화와 성능 특성을 가지고 있습니다.
1. Hot Reload (🔥)
작동 방식:
- 변경된 소스 코드를 Dart Virtual Machine(VM)에 주입합니다.
- VM은 변경된 클래스를 업데이트하고 위젯 트리를 재구성합니다.
- 앱의 상태는 유지됩니다.
특징:
- 가장 빠름 (보통 1초 이내)
- 앱 상태 유지: 변수 값, 네비게이션 상태 등이 보존됩니다.
- 제한된 변경만 적용: 메서드 본문, 함수 구현 등의 변경만 적용됩니다.
적합한 상황:
- UI 디자인 조정
- 메서드 구현 변경
- 빠른 반복 개발
적용되지 않는 변경:
- 클래스 구조 변경
- 전역 변수 추가/제거
- 열거형 추가/변경
- 생성자 변경
2. Hot Restart (🔄)
작동 방식:
- 앱 코드를 완전히 다시 컴파일합니다.
- 앱을 처음부터 다시 시작합니다.
- 모든 상태가 초기화됩니다.
특징:
- 중간 속도 (보통 몇 초 소요)
- 상태 초기화: 모든 변수와 상태가 초기 값으로 재설정됩니다.
- 더 많은 변경 적용: 클래스 구조, 전역 변수 등의 변경도 적용됩니다.
적합한 상황:
- 클래스 구조 변경
- 상태 관리 로직 변경
- 전역 변수 추가/제거
- 앱을 초기 상태로 테스트해야 할 때
3. 전체 재빌드 (Stop 후 다시 빌드)
작동 방식:
- 앱을 완전히 중지합니다.
- 네이티브 코드와 Dart 코드를 모두 다시 컴파일합니다.
- 앱을 처음부터 다시 설치하고 시작합니다.
특징:
- 가장 느림 (수십 초에서 몇 분까지 소요)
- 모든 상태 초기화: 앱이 완전히 새로 시작됩니다.
- 모든 변경 적용: 네이티브 코드, 플러그인, 에셋, 종속성 등 모든 변경사항이 적용됩니다.
적합한 상황:
- pubspec.yaml 변경 (패키지 추가/제거)
- 네이티브 코드 변경 (iOS/Android 코드)
- 에셋 추가/변경
- 플러그인 설정 변경
- 빌드 구성 변경
주요 차이점 요약
| 특성 | Hot Reload | Hot Restart | 전체 재빌드 |
|------|------------|-------------|------------|
| 속도 | 가장 빠름 (1초 이내) | 중간 (몇 초) | 가장 느림 (수십 초~몇 분) |
| 상태 유지 | ✅ 유지 | ❌ 초기화 | ❌ 초기화 |
| Dart 코드 변경 | 일부 적용 | 모두 적용 | 모두 적용 |
| 네이티브 코드 변경 | ❌ 적용 안 됨 | ❌ 적용 안 됨 | ✅ 적용 |
| 패키지/에셋 변경 | ❌ 적용 안 됨 | ❌ 적용 안 됨 | ✅ 적용 |
실제 개발 시 고려사항
- Hot Reload 문제 해결: Hot Reload가 예상대로 작동하지 않을 때는 Hot Restart를 시도해보세요.
- 상태 관련 버그: 상태 관리 관련 버그를 디버깅할 때는 Hot Restart가 더 정확한 결과를 제공합니다.
- 메모리 누수: 메모리 누수나 초기화 문제를 확인하려면 전체 재빌드가 필요할 수 있습니다.
- GetX 사용 시: GetX와 같은 상태 관리 라이브러리를 사용할 때는 Hot Reload 후 상태가 예상치 못하게 동작할 수 있으므로 주의해야 합니다.
Hot Reload는 개발 속도를 크게 향상시키지만, 때로는 더 완전한 재시작이 필요한 상황이 있습니다. 개발 중 문제가 발생하면 점진적으로 Hot Reload → Hot Restart → 전체 재빌드 순으로 시도해보는 것이 좋습니다.
반응형
LIST
'Flutter' 카테고리의 다른 글
| BLoC 패턴: 초간단 이해하기 (0) | 2025.11.05 |
|---|---|
| Flutter A/B 테스트 완벽 가이드: 데이터 기반 의사결정으로 앱 성능 향상하기 (1) | 2025.03.27 |
| Flutter에서 var와 final의 모든 것: 완벽 가이드 🚀 (1) | 2025.03.25 |
| Flutter의 @immutable 경고 해결하기: GetX 사용 시 완벽 가이드 (1) | 2025.03.14 |
| dependency_overrides를 사용하는 이유와 원리 (0) | 2025.03.14 |