Flutter 맛보기 aka. 첫 인상

Leo Kang·2021년 7월 27일
0

플러터?

플러터는 구글에서 발표한 앱 개발 프레임워크입니다.
한번의 개발로 안드로이드,아이폰에서 모두 사용가능한 장점이 있고
기존의 하이브리드 프레임워크인 ReactNative(RN) 이나 아이오닉 같은 애들은 웹기반이라 느리고
non-webbase인 자마린 같은 경우는 국내에서 사용하는 사람을 본적 있으신분?
네 저는 자마린을 하는 사람도 못봤고, 구인으로 올라오는 것도 못봤습니다.
정말 학문적 호기심을 가지고 접근한다고 해도 하기 꺼려지네요.

암튼, 각설하고 플러터가 요즘 뜬다고해서 책을 사서 보게되었습니다.
그냥 인터넷으로 뒤져서 하면 잘 안읽혀져서 전 책으로 보는 걸 선호하는 편입니다.
필요한 부분을 찾아볼 수 도 있고요

제가 본 책은 cookbook 형식으로 그냥 따라서 하면 화면이 만들어지는 형태의 책입니다.
플러터는 Dart라는 언어로 작성합니다.
자바랑 되게 유사하네요. 책에는 문법적인 내용이 없어서 좀 많이 아쉽습니다.
실제 현업 안드로이드개발자거나 자바를 알고 계신다면 금방 이해가 되는 정도의 수준입니다.

비동기 함수 만드는 법

뭐 문법상 다른거 특별히 볼건 없고...
비동기 함수를 만들기 위해서 함수 마지막 부분에 async 키워드를 넣어준다...
await 키워드를 쓰면 해당 구문이 완료될때까지 같은 함수내 기능을 멈춘다. 정도?
오~ 함수자체에서 이런 기능을 지원해주다니...
좀 더 써보면 재밌을 것 같다는 생각이 팍팍 드네요. 🌝
옆에서 보던 Terry가 자바스크립트에 있는 거라던데, 난 정말 자바스크립트는 1도 모름.

// 비동기 함수 만드는 법

void printTest() async {
	await Future.delayed(Dutation(seconds: 2), () {
    	print('Future method');
    });
    print('test');
}

// result
console> test
console> Future method

이거 쓰고 찾아보니, swift5.5에도 코루틴 들어가 있네 -0-
아, 반성하자....

문장 종결문자로 세미콜론.

java로 코딩하던게 오래?되고 요즘엔 swift를 계속 다루다 보니, 까먹었는데...
플러터는 문장 종결에 세미콜론을 써야 한다;;;
아 호감도 팍 떨어지네..😱

UI를 코드로 그린다?!

안드로이드에서 사용하던 xml을 코드로 그리는 방식과 유사한데
xml을 직접작성하는 것보다 직관적이고 설정도 편리하다.

아쉬운 점은.. 자칫 코드가 너무 길어질 수 있다는 점.
아직 저수준의 튜토리얼 수준이라 그런지, 좀 산만한 느낌도 있음.

아무래도 괄호와 중괄호를 이용해서 닫기를 하다보니,
pair를 잘못 맞추거나, 순서를 잘못 배치하는 경우가 자주 생긴다.

UI를 그리는 코드내에 비지니스 로직이 들어가는데,
UI 로직과 어떻게 커플링을 끊어내는지도 인터넷 뒤져서 찬찬히 한번 살펴 봐야겠다.
이래서야 mvvm이나 rx를 사용할 수 있는지도 궁금한데...
언어가 낮설고 그런데 지금 당장 디자인패턴을 적용할 수 있을지도 의문스럽다.
아예 첨부터 mvvm 기반으로 짜는 것을 습관을 들여놔야 할듯.

마지막으로
xcode의 스토리보드나 android studio에서 visualization 해주는 부분이
부족한데, 이건 그냥 시뮬레이터나 실제 기기로 연결해서 봐야 확인이 가능한건가?
뭐 핫리로드 기능이 신박하긴 한데, 그래도 최초 에뮬실행이나, 디바이스 연결에는 시간이 걸리니까.

앱 생명주기

플러터에서 가장 중요한게 생명주기가 아닐까 싶은데,

android에서 activity는 플러터에서는 widget 이라고 부른다.

그리고 얘는 state라는 속성으로 정의할 수 있는데 한글로 번역하자니 더 이상하니 영어로 그대로 보면
StatelessWidget: 화면 변경 없는 뷰.

  • 마치 swift의 let 키워드를 써서 화면을 그리는 거 같은.. 한번 생성되면 안 변하는 뷰의 상태
    즉 immutable 상태의 화면을 그릴때 씁니다.

StatefulWidget: 화면 변경가능한 뷰.

뷰의 상태는 setState()를 호출하여 수정을하고(mainThread에서 뷰 수정하는 것 처럼)
데이터의 변경은 didChangeDependencies()를 호출해서 수정합니다.

  • 이름이 뭔가 iOS 스럽게 되어있는 것을 확인할 수 있다.

init() -> build() -> dispose()
순으로 생명주기가 되고 앞서 말한 setState()와 didChangeDependencies()가 호출되면
build()를 다시 호출해줌.

깊숙히 까보면 더 세세하게 나눌 수 있지만
android에서 보여주던 복잡하고 난잡한? 생명주기에 비하면 아주 깔끔하다.

내 맘대로 요약

배우기 쉽고, 편리해보이지만, 난이도 있는 화면구성이나
서드파티 라이브러리 연동 등은 아직 적용하기 무섭다고 생각된다.
기존 레거시를 컨버전하기에는 버전이 꾸준이 업데이트되고 변하고 있어서 안정성 측면에서는 아직 무리라고 생각한다.
마치 swift가 4.0이 되어서 어느정도 안정화 된것처럼.. 얘도 메이저 버전이 3.x이상으로는 올라와야 하지 않을까?

  • 책이 나온지 얼마되지 않았지만 실제로 책에 쓰여진 RaisedButton은 deprecated.
    ElevatedButton을 써야함

적용할 프로젝트의 볼륨이 작아서 빨리 결과물을 만들고 싶을때 사용하면 좋을 것 같다.

구글에서 앞으로 얼마나 지원을 해줄지 모르겠는데,
삼성이랑 구글이랑 앞으로 웨어OS 협업도 하고 차세대 언어를 플러터를 쭉 밀어주지 않을까 싶기도 한데,
이왕이면 Dart가 아닌 Kotlin으로 만들어 줬다면 더 많이 쓰지 않았을까 한다.

profile
iOS developer

0개의 댓글