구글에서 2017년 5월 출시된 모바일/웹/데스크톱 크로스 플랫폼 GUI SDK이다. 하나의 코드 베이스로 안드로이드, 리눅스, Windows, macOS, iOS 및 웹 브라우저에서 모두 동작되는 앱을 위해 출시되었다. 사용되는 언어는 역시 구글에 의해 제창된 Dart를 사용한다.
웹 브라우저에서 플러터 앱은 Dart를 자바스크립트로 컴파일하거나 Flutter에서 HTML renderer 또는 CanvasKit renderer로 사용하여 웹 브라우저에서 실행할 수 있다. 웹 브라우저에서 실행은 보안이 취약한 기존 JS 웹 앱 방식을 대체하여 CanvasKit renderer로 한 임베드 웹 앱 영역에 사용하기에 최적이다. Flutter 웹은 성능, 충실도 및 일관성을 우선시함에 따라 SEO가 잘 되지 않는다.
데스크톱 상에서의 플러터 앱 실행은 2021년 3월부터 공식적으로 지원되고 있다. 구글의 차기 운영체제인 퓨시아의 유저 인터페이스 및 퓨시아 애플리케이션들이 플러터로 작성된다.
플러터 프레임워크는 소스 코드를 네이티브 CPU 머신 코드로 직접 컴파일 하며 UI를 렌더링 엔진 Skia로 직접 렌더링하기 때문에 성능이 뛰어나다. 소프트웨어 디자이너의 선택에 따라 iOS 앱에서 구글의 Material 테마 디자인과 Ripple 애니메이션을 사용하는 것이 가능하고 반대로 안드로이드에서 애플의 Cupertino 테마를 적용하는 것도 가능하다. 즉 플랫폼에 관계없이 플러터용 테마 디자인 라이브러리 적용 및 테마(Theme) 커스텀이 가능하다는 뜻이다. 각 OS의 네이티브 Widget/UI 컴포넌트로 변환하지 않고 플러터의 렌더링 엔진인 스키아로 직접 플랫폼 캔버스 상에 그리기 때문에 성능이 높고 어느 운영체제에서나 픽셀 퍼펙트한 소프트웨어 디자인이 가능하다.
크로스플랫폼 환경이면서도 네이티브 성능, 미려한 UI 디자인 라이브러리, 확장 기능을 제공하는 앱 프레임워크이다. Flutter Gallery 샘플 앱을 설치하여 성능을 확인할 수 있다. 아이폰에서는 소스 코드를 다운받아 Xcode에서 실행하면 잘 작동한다. 안드로이드 스튜디오나 IntelliJ IDEA, Visual Studio Code 등을 이용하여 소프트웨어 디자인을 할 수 있다.
Hot Reload 기능을 사용하면 디버깅을 중지하지 않고 소스 수정 후 저장만 하면 에뮬레이터나 기기에 바로 반영되어 UI와 로직이 모두 업데이트된다. 프레임워크의 구조 설계 자체가 이 기능을 충실히 지원하도록 구성되어 있다. Hot Restart 까지 사용하면 프로젝트를 닫기 전까지 디버깅을 중지할 필요가 없다.
Flutter로 개발하려면 Dart라는 프로그래밍 언어를 사용한다. 이 언어는 2011년 10월 Google에서 만들었지만 지난 몇 년 동안 많이 개선되었다. Dart는 프론트엔드 개발에 중점을 두고 있으며 이를 사용하여 모바일 및 웹 애플리케이션을 만들 수 있다. 프로그래밍에 대해 조금 알고 있다면 Dart는 유형이 지정된 객체 프로그래밍 언어이다. Dart의 구문을 JavaScript와 비교할 수 있다. 플러터에서 SDK와 프레임워크가 매우 중요하다.
SDK(소프트웨어 개발 키트) : 응용 프로그램 개발에 도움이 되는 도구 모음입니다. 여기에는 코드를 기본 기계 코드(iOS 및 Android용 코드)로 컴파일하는 도구가 포함됩니다.
프레임워크(위젯 기반 UI 라이브러리) : 필요에 맞게 개인화할 수 있는 재사용 가능한 UI 요소(버튼, 텍스트 입력, 슬라이더 등) 모음입니다.
Flutter는 단일 코드베이스에서 모바일, 웹 및 데스크톱용으로 고유하게 컴파일된 아름다운 애플리케이션을 개발하고 빌드하기 위해 만들어진 구글(Google)의 UI 툴킷이다. 신뢰도 높은 구글의 개발 도구이며 플러터를 사용하는 회사가 많다. 뿐만 아니라 배우기 쉽고 활용도가 높다. Flutter는 현대적인 프레임워크이며 여러가지 모바일 애플리케이션을 만드는데 수월하다. 사용자들의 후기를 살펴보면 Flutter는 실제 네이티브 애플리케이션을 만들 수 있다는 점이 만족스럽다고 한다.
출처 : https://blog.naver.com/sunhyowon/222859449021?isInf=true