Dart : 구글에서 만들었고 User Interface에 최적화
flutter 크로스 플랫폼 앱
dart를 배우지 않고 flutter를 배울 경우 이해가 안가거나 문제가 생겼을때 그 문제가 flutter 때문인지 dart인지 이해를 못할 수 있음.
구문이 다른 프로그램 언어랑 비슷하게 생김.코틀린, 스위프트, 타입 스크립트
왜 dart인가
모든 플랫폼에서 빠름
2개의 컴파일러를 가지고 있음 dart web과 dart native
dart web은 작성한 dart 코드를 javascript로 변형해주는 컴파일러임
dar natvie는 dart 코드를 여러 CPU의 아키텍처로 변형해줌. ARM32, ARM64 x86_64로 변경
그래서 OS에 상관없이 가넝 사물 인터넷 까지
컴파일 되는 방법은
Just In time과 ahead of time이 있는데
AOT는 코드를 컴파일 하고 그 컴파일한 바이너리를 배포하여 결과를 확인하는 것
C++, Rust 등의 언어로 코딩을 할 때 컴파일이 필요한다. 컴파일을 하고 바이너리를 배포하는것이 시간이 오래 걸림 그래서 UI를 개발할 때는 비 효율 적임. 또한 개발 중에는 변경사항을 즉각적으로 확인할 수 있어야함.
JIT는 작성한 코드를 바로 화면에서 볼 수 있음
dart는 dart VM을 지원하기 때문에 , 가상머신을 사용하기 때문에 좀 느릴 수 있음 -> 그래도 몇 초 걸림 . 디버깅 지원도 가능 이 기능은 개발 중에만 사용하고 개발 완료 후에는 AOT로 컴파일 하여 빠르게 가능
앱을 배포할 때는 앱이 빨리 도랑가야하기 때문에 AOT가 적절함.
null safety -> 개발자가 null을 참조할 경우 오류가 발생할 경우가 높음.
AOT와 JIT를 모두 지원
dart와 flutter 모두 구글이 만들었음. flutter를 위해 dart 언어를 수정하거나 추가할 수 있음.
1. main function
-> dart 프로그램의 엔트리 포인트. 무조건 작성해야함. 그래야 호출 됨.
main을 다른 함수명으로 지정하고 억지로 실행 할 경우 오류가 발생 함.
main method를 찾을 수 없다고 오류 발생함.
세미콜론이 매우 중요함. dart에서는 자동으로 세미콜론을 추가해주지 않음. 일부러 안쓸 때도 있기 때문에 그래서 세미콜론에 신경을 잘 써야함.
변수
기초적인 변수는 var 임. var로 선언하여 값을 초기화 할 경우 dart가 해당 변수의 타입을 유추하여 자동으로 세팅해줌. 혹은 자료형을 명확하게 명시 할 수 있음. Sring int bool 등등
관습적으로 함수나 메소드 내부에 지역 변수를 선언할 때는 var를 사용함.
클래서에서 변수나 property를 선언할 때는 타입을 직접 지정해줌.
var를 사용할 경우 변수에 데이터를 초기화 할때 타입을 알아서 세팅해주기 때문에 var를 사용하기를 권장함.
dynamic 여러가지 타입을 가질 수 있는 변수에 사용. 사용하기 추천되지 않지만 유용함.
json으로 사용할 때 그 타입에 어떤 값이 올지 모르기 때문. dynamic으로 변수를 선언하고 후에 string 조건문을 두게 되면 flutter가 알아서 그 변수가 string으로 인식하고 string이 사용할 수 있는 메소드를 제공해줌.
var name; 또는 dynamic name 이런 형식으로 사용
nullsafety
컴파일 전에 이 오류를 잡는게 좋음. 변수에 값이 들어가지 않아 발생하는 오류가 많음. 이를 방지 하기 위해서 사용. 변수를 String이나 자료형으로 선언했을때 값에 null이 오게 되면 오류가 발생됨.
ex) String name = null;
null safety 때문에 그 변수가 null이 될 수 없기 때문임. 이때 변수에 ?를 붙이면 null을 사용할 수 있음.
ex) String? name = null;
그 후에 name에 string 관련한 속성을 사용하려면 null일 경우 참조를 할 수 없기 때문에 오류가 발생함.
ex) name.isnotEmpty
그 메소드를 사용하기 전에 무조건 null 체크를 해줘야 그 기능을 사용할 수 있게 함. 이때는 변수명 뒤에 ?를 붙여서 사용하기도함.
ex) name?.isnotEmpty
name이 null이 아닐경우 isnotEnpty 속성을 달라고 요청하는 것임.
Final
한번 정의된 변수를 수정할 수 없게 만드는 것 javascript나 typescript의 const와 똑같음. 타입 추가도 가넝 하지만 컴파 일러가 알아서 타입을 추측해주기 때문에 굳이 안해두 됨.
ex) DB 접속 정보 등등
Late
final이나 var 앞에 붙여 줄 수 있음. late는 초기 데이터 없이 변수를 선언할 수 있음. 초기화 없이 가넝
api에서 데이터를 받거나 등등 해서 추후에 받아온 데이터를 넣어 줄 수 있음.
const
javascript나 typescrip와 다름 같은건 final이 같음. const는 compile-time const를 만들어 줌.
컴파일이 될 때도 바뀌지 않은 값.
컴파일 할때 알고 있는 값. ex) 앱을 올리기전에 알고 있는 값. 사용자가 입력해야하거나 API에서 받아오는 값들은 var가 되어야함. 아예 maxx_allow_price 등등 컴파일 할때 앱스토어에서 올라가기전에 정으 ㅣ되는 것들
recap
변수를 만드는 방법 2가지
자료형을 명시하기 var로 dart한데 유추하게 시키기
var 사용하는게 권장됨. 타입을 명시하는것은 class의 property를 명시할때 구체화
세미콜론은 중요함. 하나하나 사용자가 입력해야함.
변수에 값을 한번만 할당하고 싶을 경우 final을 사용. 한번만 변수에 값 부여 가능
dynamic은 어떤 데이터가 들어올지 모를 경우 사용 조심해서 써야함. 다이나믹은 사용하기 전에 타입을 한번 확인해줘야함.
const는 컴파일 할때 알고 있어야하는 값 ex)api_key 등등 수정할 수 없음.
final은 runtime중에 만들어질 수 있음 ex) user_id 등등
null safety 잘못된 상태의 변수를 참조하는 것을 방지 해줌.
dart의 모든 변수는 null이 될 수 없음 해당 변수가 null일 수 도 있을 경우 변수를 선언할때 ?를 붙여서 변수를 선언함.
late
final var 에서 쓸 수 있음 추후에 변수가 할당될 거라는 의미, 데이터를 사용하기 전에 꼭 값을 넣도록 해줌.
'공부' 카테고리의 다른 글
WinSW 설정 매뉴얼 번역 (0) | 2020.09.22 |
---|