참고: https://dart.dev/overview + https://nomadcoders.co/
✔️ Dart 기초 지식
Dart 컴파일러
1) Dart Native
- dart 코드를 여러 CPU의 아키텍처에 맞게 변환해주는 컴파일러
- ARM32, ARM64, x86_64
- JIT(just-in-time) and AOT(ahead-of-time)
- 개발 중에는 JIT로 컴파일하여 dart VM을 사용하고, 즉시 컴파일
- 개발 이후에는 AOT 컴파일을 통해 배포 가능
2) Dart Web
- dart 코드를 javascript로 변환해주는 컴파일러
또한, Dart 언어는 null safety를 도입하였기 때문에
null이 발생하면 에러가 발생하게 되는 특징을 가지고 있다.
Dart offers sound null safety, meaning that values can’t be null unless you say they can be.
위는 Dart overview 공식 사이트 내용 중 일부이다.
그리고 Dart와 Flutter는 Google 안에서 일어나는 모든 일들이기 때문에
서로 협력하는 관계이다. 그래서 초기 AOT가 없었지만, Flutter를 위해서
AOT를 만들고 빠르게 컴파일 할 수 있는 장점을 가지게 되었다고 한다.
✔️ Dart Hello World
간단하게 Dart 실습은 https://dartpad.dev/? 홈페이지에서 진행할 수 있다.
또는, Dart 언어가 설치되어 있다면 VSCode 등의 개발 프로그램에서도 진행할 수 있다.
다음과 같이 진행할 수 있다.
여기에서 나오는 main 함수는 모든 Dart 프로그램의 Entry Point이다.
main 함수는 반드시 작성하고, 해당 코드가 호출되게 된다.
즉, main 함수가 있기 때문에 Run/실행을 할 수 있게 된다.
main 함수가 없다면 No 'main' method found. 라는 오류를 만나게 된다.
또한, 세미콜론이 필요하다는 것도 하나의 특징으로 존재한다.
세미콜론은 사용하지 않을 때도 있기 때문에 사용에 있어서
꼭 주의를 기울이면서 작성할 필요가 있다.
왜냐면, dart는 자동 포매터 기능을 제공하지 않아서
vscode 익스텐션의 javascript 등과 같이 자동으로 달아주지 않기 때문이다.
Dart에서는 var 변수 또는 타입 변수를 작성할 수 있는데,
var 변수는 함수 또는 메소드 내부 지역 변수를 선언할 때 관습적으로 사용한다.
String과 같이 타입을 지정한 변수는 class에서의 변수 혹은
property를 선언할 때 타입을 지정해주게 된다.
타입에는 Dynamic Type이 존재하는데,
dynamic은 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드이다.
잘 사용하지는 않지만, 때때로 사용하기도 한다.
위처럼 해당 동적 타입의 변수에 여러 값의 삽입이 가능하게 된다.
dynamic은 변수가 어떤 타입인지 알기 어려울 때 또는
dynamic으로 돌아가는 코드가 유용할 때가 존재한다.
var이 아닌 dynamic 타입으로 변수를 선언하는 것도 가능하다.
다음처럼 변수의 타입이 무엇인지 알게되면,
문자열의 다양한 함수를 보여주는 것도 가능하게 된다.
타입이 무엇인지 모를 때는 할 수 있는 것이 별로 없게 된다.
✔️ Null Safety of Dart?
Dart의 null safety는 개발자가 null 값을 참조할 수 없도록 하는 것이다.
코드에서 null을 참조하게 되면 런타임 에러가 발생하게 된다.
bool isEmpty(String string) => string.length == 0;
main() {
isEmpty(null);
}
예를 들어 다음과 같은 코드가 존재할 때, 이전 Dart에서는
null은 length라는 메소드가 없기 때문에 NoSuchMethodError 라는
에러가 발생하게 되고 이는 사용자 기기에서 에러가 나기 때문에
런타임에서는 에러가 발생하지 않게 된다. 이러한 null 참조에 대해서
미리 보호하는 것을 현재의 Null Safety의 기능인 것이다.
이는 다음과 같은 에러가 발생하게 되는데
typescript처럼 ? 물음표를 작성하게 되면, string 일수도 있고 null 일수도 있게되어서
위와 같은 에러는 사라지게 된다.
대신 메소드를 사용하기 전에 조건문 등으로 사전에 타입을 확인하는 것이 좋다.
즉, Dart의 Null Safety 라는 것은 어떠한 변수나 데이터가
null이 될 수 있다는 것을 명시하는 것이다. 이는 어떠한 데이터가 null을
참조하지 않을 수 있도록 돕는다.
기본적으로 모든 변수는 non-nullable 이다.
nullable 하게 만들기 위해서는 다시 물음표를 삽입하면 된다.
마치 타입스크립트를 작성하는 것처럼 말이다.
이는 위와 같은 문법으로 작성도 가능하다.
name이 null이 아니라면 isNotEmpty 속성을 가져오는 것이다.
다음시간에 이어서❗
화이팅
'개발(dev) > dart' 카테고리의 다른 글
[dart] dart 기초 (6) (0) | 2023.01.08 |
---|---|
[dart] dart 기초 (5) (0) | 2023.01.08 |
[dart] dart 기초 (4) (0) | 2023.01.07 |
[dart] dart 기초 (3) (0) | 2023.01.07 |
[dart] dart 기초 (2) (0) | 2023.01.06 |