Flutter란?
구글에서 제작한 2017년 크로스 플랫폼 모바일, 웹, 데스크톱 GUI 어플리케이션 소프트웨어 디자인 프레임워크이다. 사용되는 언어 역시 구글에서 만든 Dart를 사용한다.
플러터는 각 OS 플랫폼의 네이티브 widget/ui 구성요소로 변환하지 않고 플러터의 그래픽 랜더 엔진인 스키아로 직접 플랫폼 Canvas상에 드로잉 되기 때문에 성능이 높고 플랫폼에 관계없이 픽셀 퍼팩트한 디자인이 구현 가능하다. 예를 들면 다른 크로스 플랫폼 도구의 경우 해당 도구 상에서 위젯을 만들면 안드로이드에서 실행 할 때 네이티브 위젯으로 변환되어서 실행된다. 하지만 플러터는 네이티브 언어가 가진 위젯으로 변환되어 GUI가 구성되는 것이 아니라 픽셀을 직접 관리하여 디자인 하기 때문에 모든 운영체제에서 완벽하게 동일한 디자인을 구현할 수 있는 것이다.
그렇다면 여기서 프레임워크란 무엇일까?
프레임워크란 랄프 존슨(Ralph Johnson)교수가 "소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것"이라고 정의하였다.
프레임워크는 라이브러리와 달리 애플리케이션의 틀과 구조를 결정할 뿐 아니라, 그 위에 개발된 개발자의 코드들도 제어한다. 프레임워크는 구체적이며 확장 가능한 기반 코드를 가지고 있으며, 설계자가 의도하는 여러 디자인 패턴의 집합으로 구성되어 있다.
간단하게 라이브러리와 비교하여 설명하자면,
라이브러리는 아무리 날고 기어봤자 라이브러리는 라이브러리이다. 라이브러리가 설계를 대신해주진 않는다. 예를 들어 프로그래머가 프로그램을 짜다가 특정 기능이 필요할 때 라이브러리를 뽑아서 쓰는 대상인 것이다. 피씬과정을 생각하보면 우리가 화면에 어떤 것들을 출력하고 싶을 때, write라는 함수를 <unistd.h>에서 가져오는 것과 같은 의미인 것이다.
프레임워크는 제작자가 만들어둔 기반 코드가 있다. 그래서 사용자들은 이 코드, 클래스들을 가지고 본인이 원하는 방향으로 꾸미고, 기능을 덧붙이고, 내부에 다양한 라이브러리를 가져와서 자기만의 프로그램을 완성하는 것이다. 예를 들어 Flutter 프레임워크를 활용해서 첫 프로젝트를 제작하면 바로 실행가능한 어플리케이션이 완성되어 있다.
위의 사진처럼 Flutter는 프로젝트만 생성해도 기초적인 어플리케이션의 틀이 완성되어 있다. 이러한 샘플, 즉 '확장 가능한 기반 코드'에는 프레임워크 제작자 나름대로의 설계 철학이 담겨 있다. 이러한 코드에는 제작자가 설계한 구조를 유지하며서 확장할 수 있도록, 제작자에 의해 의도된 제약 사항이 존재한다. 이것은 혹시나 프로그램이 의도치 않은 결과를 낼 수 있기 때문에 제약을 가하고 싶은 사항들을 만들어 둔 것이다.
결국 프레임워크란
설계의 기반이 되는 부분을 기술한 확장 가능한 기반 코드와
사용자가 이 코드를 자기가 원하는 대로 확장하는 데 필요한 라이브러리
이 두 가지 요소가 통합되어 제공되는 형태를 말한다.
프레임워크를 활용하면 빠른 시간에 프로그램을 완성할 수 있다. 기본적인 설계 및 필요한 라이브러리들은 이미 프레임워크에서 제공을 하고 개발자는 기능 구현에 집중할 수 있는 것이다.
Dart란?
구글이 JavaScript를 대체하기 위해 2011년 개발한 웹프로그래밍언어이다. JavaScript와는 다르게 모바일 앱, 웹 앱, 명령어 스크립트, 서버 프로그래밍 등 많은 곳에서 고르게 사용된다. Dart 프로젝트의 목적은 구조적이지만 유연하고, 프로그래머들에게 자연스럽고, 다양한 종류의 기기에서 돌아가게 하는 것이다.
기존 프로그래밍 언어, 특히 JAVA랑 유사한 점이 많기 때문에, 처음에 배울 때 몇 가지 특징만 숙지하고 있다면 쉽게 숙지하고 넘어갈 수 있다.
다트의 여러 특징들은 아래의 블로그에 잘 정리되어 있다.