[Flutter 공부하기] Hot Reload 와 Hot Restart

반응형

Flutter 개발에서 가장 매력적인 기능 중 하나인 디버깅 도구와 Hot Reload에 대해 알아보겠습니다.

이 기능들을 제대로 활용하면 개발 속도와 효율성이 크게 향상되고, 버그를 빠르게 발견하고 수정할 수 있습니다.

Hot Reload와 Hot Restart

Flutter가 다른 모바일 개발 프레임워크와 차별화되는 가장 큰 특징 중 하나는 바로 Hot ReloadHot Restart 기능입니다.

이 기능들은 개발 과정에서 코드 변경사항을 빠르게 그리고 바로바로 확인할 수 있게 해주어 효율적인 개발이 가능하게 해줍니다.

Hot Reload란?

Hot Reload는 앱을 완전히 다시 시작하지 않고도 코드의 변경사항을 즉시 앱에 반영하는 기능입니다.

코드를 수정한 후 저장하고 Hot Reload 버튼을 클릭하거나 단축키(보통 r)를 누릅니다. Flutter는 변경된 코드만 다시 컴파일하고 앱의 위젯 트리를 다시 빌드합니다. 앱의 상태는 유지된 채로 UI만 업데이트됩니다.

보통 1초 이내로 매우 빠르게 반응을 하고, 로그인 상태나 네비게이션 스택 등 앱의 현재 상태가 유지된 채로 UI 수정이나 로직 조정 시 즉각적인 피드백을 할 수가 있습니다.

Hot Reload는 위젯 레이아웃을 조정할 때 매우 효과적입니다. 또한 UI 색상, 텍스트 또는 마진을 변경할 때도 즉시 결과를 확인할 수 있어 유용합니다. 위젯의 다양한 속성을 수정하거나 상태 관리 로직을 변경할 때도 Hot Reload를 활용하면 개발 효율성을 크게 높일 수 있습니다.

예를 들어, '안녕하세요!'라는 텍스트의 스타일을 fontSize가 18이고 color가 파란색인 TextStyle에서 fontSize가 24이고 color가 빨간색이며 fontWeight가 굵게 설정된 TextStyle로 변경한 후 Hot Reload를 실행하면 즉시, 변경사항을 확인할 수 있습니다.

Hot Restart란?

Hot Restart는 Hot Reload보다 조금 더 무거운 작업으로, 앱을 완전히 재시작하지만 컴파일 과정을 최적화하여 일반 재시작보다 빠릅니다. 코드를 수정한 후 Hot Restart 버튼을 클릭하거나 단축키(보통 Shift+r)를 누르면 Flutter는 전체 앱 상태를 초기화하고 앱을 재시작합니다.

Hot Restart는 Hot Reload로 반영되지 않는 변경사항도 적용할 수 있고, 앱을 초기 상태로 되돌리며, 일반 재빌드보다 훨씬 빠르다는 장점이 있습니다.

Hot Restart는 앱 초기화 코드 변경(main.dart 수정)이나 전역 상태 관리 변경, 자산(Assets) 구성 변경, 종속성 추가/제거와 같은 상황에서 필요합니다.

Hot Reload와 Hot Restart의 한계도 있지.

모든 변경사항이 Hot Reload로 적용되지는 않습니다.

전역 변수나 정적 필드 초기화는 Hot Reload에 반영되지 않으며, initState() 메서드도 다시 호출되지 않습니다.

또한 열거형(enum) 추가/변경, 플러그인 코드 변경, 네이티브 코드 변경 등의 경우에는 Hot Reload만으로는 변경사항이 적용되지 않습니다.

이런 경우에는 Hot Restart 또는 전체 재빌드(Full Rebuild)가 필요합니다.

다른 개발 환경과의 비교하면 그래도 장점이 많다.

Flutter의 Hot Reload는 Java 개발 환경에서 JVM 재시작이 필요하고 JRebel 같은 도구를 별도로 구매해야 하는 것과 달리 기본 제공됩니다.

 

JavaScript에 웹 개발에서는 브라우저 새로고침으로 상태가 손실되곤 하지만 Flutter는 상태를 유지하면서 UI만 업데이트할 수 있습니다. 물론 React와 React Native에는 Fast Refresh라는 유사한 기능이 있지만, Flutter가 일반적으로 1초 이내로 더 빠르게 반응하는 것이 특징입니다.

 

Android 네이티브 개발의 Apply Changes나 Instant Run보다 더 안정적이고 빠르게 작동하면서 Dart 언어와 Flutter 프레임워크가 같은 팀에 의해 개발되어 Hot Reload 기능이 더 긴밀하게 통합되어 있습니다.

 

Hot Reload로 처리할 수 없는 변경사항을 위한 Hot Restart 옵션까지 제공하여 전반적으로 개발자 경험과 UI 개발 효율성 측면에서 장점이 있습니다.

 

감사합니다.

Designed by JB FACTORY