귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!==단점== 문제점이라면 Flutter의 개발 언어인 [[Dart]]가 별 인기가 없다는 것... 원래는 [[자바스크립트]]를 대체할 언어로 들고 나왔지만 시장에서 완전히 파묻혔으며<ref>[[자바스크립트]]를 대체하려면 바로 [[HTML]] 안에 삽입해서 돌아갈 수 있도록 브라우저가 지원해줘야 하는데 구글이 만든 크롬 말고는 지원하는 브라우저가 없다. 물론 크롬의 점유율이 높긴 하지만 맥 사용자는 대부분 사파리를 쓰며 아이폰이나 아이패드는 닥치고 사파리, 그리고 파이어폭스도 어느 정도 사용자층을 가지고 있는 점을 생각해 보면 자바스크립트의 대안이라는 원래 목적은 실패에 가깝다.</ref>, [[자바스크립트]]의 대안은 [[MS]]가 들고 나온 [[타입스크립트]]가 잡고 있는 실정이다. [[Dart]]나 [[타입스크립트]]나 간단한 컴파일을 통해 [[자바스크립트]]로 번역되기 때문에 이미 상당히 성숙해 있으며 개발자 저변도 넓은 [[자바스크립트]]를 대체한다기보다는 보완하는 역할 정도인데, 여기서도 [[타입스크립트]]한테 완전히 밀려서 쓰레기 취급 받던 언어다. 기능 확장을 위한 패키지들도 [[파이썬]]이나 [[자바스크립트]]에 비하면 형편없이 부족하다. 아무튼 구글에서 그냥 파묻기에는 아까웠던 건지 Flutter를 통해 [[Dart]]를 부활시킨 셈이다. Flutter에 힘입어 Dart도 약진하고 있고, [[크로스 플랫폼]] 언어 시장에서는 리액트 네이티브와 치열한 1위 경쟁을 벌이는 수준까지 올라왔다.<ref>[https://www.statista.com/statistics/869224/worldwide-software-developer-working-hours/ "Cross-platform mobile frameworks used by software developers worldwide in 2019 and 2020"], Statista, 2 July 2020.</ref> 하지만 지금으로서는 [[Dart]]는 Flutter 말고는 별로 써먹을 데가 없다. [[자바스크립트]]는 웹 프론트엔드 쪽에서는 말할 것도 없는 필수요소고, [[Node.js]]의 성공으로 프론트엔드와 백엔드까지 한 가지 언어로 퉁칠 수 있는, 명실상부한 대세다. 엘렉트론 [[프레임워크]]를 쓰면 크로스 플랫폼 데스크톱 애플리케이션까지 만들 수 있고, 이를 활용한 [[비주얼 스튜디오 코드]]를 비롯한 훌륭한 작품들이 있다. 그런데 Dart는? 물론 Flutter도 웹과 데스크톱을 지원하기 시작했지만 [[자바스크립트]]에 비하면 그 격차는 아득히 멀고, [[Dart]]를 [[자바스크립트]]로 변환할 수 있지만 그럴 거면 그냥 자바스크립트를 쓰거나, [[자바스크립트]]의 언어 구조가 영 별로라면 [[타입스크립트]]라는 훌륭한 대체재도 있다. 현재로서는 [[Dart]]의 미래는 오로지 Flutter에 달려 있고, 만에 하나 Flutter가 망하면 [[Dart]]는 정말로 쓰레기가 된다. 과연 [[Dart]]라는 새로운 언어를 배워가면서까지 Flutter를 꼭 써야 하나? 하는 의구심이 들 수밖에 없다. [[Dart]]의 문법은 [[자바스크립트]]와 닮은 구석도 꽤 있고, 진입장벽이 낮기 때문에 [[자바스크립트]]나 [[자바]] 같은 언어들을 잘 알고 있다면 Flutter를 쓰기 위해서 [[Dart]]를 배우기 위해 시간을 많이 들일 필요는 없다. 그리고 [[Dart]] 자체도 기능이 형편 없거나 배우기가 지랄맞거나 한 언어는 절대로 아니며 처음에는 쉬워보이지만 쓰면 쓸수록 헷갈리기 쉬운 [[자바스크립트]]에 비하면 버그가 적고 깔끔한 코드를 만들 수 있다.<ref>[[MS]]가 내놓은 [[자바스크립트]]의 슈퍼셋인 [[타입스크립트]]도 변수에 유형을 지정함으로써 버그를 줄여주는 효과가 주된 목적이다. 아예 이름에 type(유형)이 들어가 있다.</ref> 또한 Flutter의 장점으로 손꼽히는 핫 리로드나 핫 리스타트는 그만큼 [[Dart]]가 잘 디자인된 언어라는 것을 보여주는 증거이기도 하다. 단지 [[자바스크립트]]를 대체하겠다는 욕심이 너무 컸던 것도 있고, 다른 웹 브라우저 입장에서 보면 크롬 웹 브라우저를 가지고 있는 구글에게 좋은 일을 굳이 해줄 이유도 없으니 이들에게 외면 받은 탓이 크다. 자세한 내용은 [[Dart]] 항목 참조. Flutter 덕분에 [[Dart]]가 재발견되고 사용층도 넓어지고 있는 추세이고 이를 지원하는 개발 도구도 늘어나고 있으며, 여러 가지 기능을 손쉽게 추가시킬 수 있는 패키지도 빠르게 늘고 있기 때문에 [[Dart]] 언어 자체도 여러 가지로 쓰기가 좋아지고 있으며 악평도 줄어들고 있다. 그래도 이미 세상에는 많은 [[C샵|C#]] 또는 [[자바스크립트]] 개발자들이 있고, 이들은 기존에 손에 익은 언어로 개발할 수 있는 플랫폼을 선호하기 때문에 이들보다 개발 인구가 훨씬 적은 [[Dart]]는 약점을 안고 있다. 또한 각각의 운영체제 및 하드웨어 쪽으로 특화된 기능을 활용하는 데에는 한계가 있다. 이건 Flutter만이 아닌 모든 [[크로스 플랫폼]]의 한계라고 봐야 할 문제. 이런 부분은 각 운영체제마다 필요한 대로 네이티브 코드를 붙일 수 있다. 다만 카메라나 위치정보처럼 공통적인 인터페이스를 잘 제공하는 패키지들도 늘어나고 있기 때문에 네이티브 코드로 처리해야 할 부분들이 점점 줄어들고 있기도 하다. 국제화 부분도 불편한 점으로, 문자열 자원을 언어별로 관리하는 게 안 되는 건 아니지만 각각의 언어별로 문자열을 모두 클래스로 만들어야 하기 때문에 [[안드로이드]]나 iOS 네이티브로 개발할 때보다는 많이 번거롭고 툴의 지원도 별로 좋지 않다. 이런 부분들은 시간이 지나면서 여러 가지 툴이 나오면서 나아지고는 있다. 구글은 [[JSON]] 형식 기반의 ARB 파일을 만들어서 컴파일하면 클래스가 자동으로 만들어지는 방법도 제공하고 있어서 많이 편해지긴 했지만 그래도 최소한 안드로이드라면 네이티브로 개발할 때보다는 좀 복잡하다. 코드 스타일 면에서는 [[자바스크립트]]의 그 악명 높은 [[콜백 지옥]]<ref>이게 워낙 심각하다 보니 [[자바스크립트]]도 문제 해결에 많은 노력을 기울였고 ES6, ES7을 거치면서 promise 지원이나 await, async 같은 비동기 키워드 지원으로 상당 부분을 해소했다.</ref>을 방불케 하는 들여쓰기 지옥이 있다. 위젯을 만들 때에는 속성을 생성자의 매개변수로 전달하는 방식을 사용하는데, Flutter의 레이아웃은 위젯의 트리 구조로 이루어진다. 자식 위젯은 보통 부모 위젯의 child(단일 위젯) 또는 children(위젯의 배열) 속성으로 전달하는데, 레이아웃이 복잡해지면 그만큼 위젯의 계층 수도 늘어나고, 그러면 부모 위젯 생성자의 chlid 속성에 자식 위젯의 생성자가 들어가고, 그 자식 위젯의 생성자 child 속성에 손자 위젯의 생성자가 들어가고... 이런 식으로 이어진다. 또한 위젯의 여백을 준다든가, 테두리 모양을 바꾼다든가, 위젯들을 정렬한다든가, 사용자 입력 반응 기능이 없는 위젯에 이러한 기능을 부여한다든가 할 때에도 위젯을 사용하므로 위젯의 계층 수가 두 자릿수로 갈 수 있으며 이렇게까지 가면 [[콜백 지옥]] 저리가라 할 정도의 들여쓰기 지옥을 맛볼 수 있다. 이를 피하려면 build() 안에 모든 위젯 렌더링 코드를 넣지 말고 Widget 객체를 돌려주는 몇 개의 메서드로 쪼갠 다음 이를 build()에서 부르거나, 여러 클래스에 걸쳐 쓰인다면 별도로 위젯 클래스를 만들어서 분리하는 방법도 있다. 용량도 아직은 문제인데, 자체적으로 사용자 인터페이스를 렌더링하는 Skia 엔진이 들어가므로 운영체제의 UI 관련 라이브러리를 불러다 쓰면 되는 네이티브보다는 덩치가 클 수밖에 없다. 릴리즈 모드로 컴파일 하면 Skia 중에 실제 앱에서 쓰는 부분만 포함시키는 방식으로 크기를 줄이긴 하지만 그래도 네이티브와는 차이가 꽤 난다. 구글도 이 점은 알고 있기 때문에 버전을 올려 나가면서 앱의 크기를 줄이는 데 많이 신경쓰고 있다. 이런 문제는 다른 [[크로스 플랫폼]]도 안고 있다. 예를 들어 .NET [[프레임워크]]의 [[크로스 플랫폼]] 버전인 모노 [[프레임워크]]를 안고 들어가야 하는 [[자마린]] 역시 'Hello world!' 하나 보여주는 앱도 용량이 장난 아니다. 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)