JiSoo's Devlog

[Dart 시작하기] Section 1 본문

App/Dart

[Dart 시작하기] Section 1

지숭숭숭 2024. 1. 16. 16:41

Dart는 두 개의 컴파일러를 가지고 있다

Dart Web(dart로 쓴 코드를 JavaScript로 변환) / Dart Native(dart 코드를 여러 CPU의 아키텍처에 맞게 변환)

 

JIT(Just-It-Time) 컴파일 : dart VM으로 내가 쓴 코드의 결과를 바로 화면에 보여준다

AOT(Ahead-Of-Time) 컴파일 : 컴파일을 먼저 하고 그 결과인 바이너리 배포

-> 빠른 피드백을 원하면서도 최종 앱은 컴파일되어서 빨라야 한다

 

null safety는 안전한 프로그램을 빌드할 때 중요

 

dart언어를 수정해 flutter를 더 빠르게 할 수 있다

 

flutter에서 모든 건 class이다

 

main 함수는 모든 Dart 프로그램의 Entry point 이기 때문에 아주 중요

반드시 main 함수를 쓰는데 main 함수에서 우리가 쓴 코드가 호출되기 때문이다

 

세미콜론을 써줘야 한다!!!

dart는 auto formatter 기능이 없어서 직접 써줘야 한다! -> 일부러 세미콜론을 안 쓸 때가 있기 때문에

 

변수 만들기

1. var 사용

void main(){
  var name = '지수';
}

변수의 타입을 구체화할 필요가 없다

변수는 수정할 수 있는데 본래 타입과 일치해야 한다

 

2. 명시적으로 변수 타입 지정

void main(){
  String name = '지수';
  name = '지숭';
}

 

관습적으로 함수나 메서드 내부에 지역 변수를 선언할 때는 var 사용

class에서 변수나 property를 선언할 때는 타입 지정

어떤 경우든 변수는 업데이트할 수 있다

 

dynamic은 여러 가지 타입을 가질 수 있는 변수에 쓰는 키워드

void main(){
  var name;
  name = 'jisoo';
  name = 12;
  name = true;
}

이게 가능한 이유는 변수의 타입이 dynamic이기 때문

변수가 어떤 타입일지 알기 어려운 경우가 있기 때문에 사용!

 

void main(){
  dynamic name;
  name = 'jisoo';
  name = 12;
  name = true;
}

이렇게 dynamic이라고 써줘도 된다

dynamic을 이용하면 dart가 데이터 타입을 확인할 수 있도록 도와준다

void main(){
  dynamic name;
  if(name is String){
  }
  if(name is Int){
  }
}

dynamic은 정말 필요할 때만 써야 한다

 

null safety는 개발자가 null 값을 참조할 수 없도록 하는 것

어떤 변수, 혹은 데이터가 null이 될 수 있음을 명시하는 것을 의미

만약 null값을 참조하면 런타임 에러 뜬다

null은 부재를 의미

dart에서는 어떤 변수가 null이 될 수 있음을 정확히 표시해야 한다

void main(){
  String? jisoo = 'jisoo';
  jisoo = null;
}

이렇게 ?물음표 를 사용하면 jisoo가 String일 수도 null일 수도 있다

dart의 null safety는 어떤 변수나 데이터가 null이 될 수 있음을 명시하는 것을 말한다

기본적으로 모든 변수는 non-nullable

void main(){
  String? jisoo = 'jisoo';
  jisoo = null;
  jisoo?.isNotEmpty;
}

jisoo?.isNotEmpty 는 null인지 확인 후 연산 진행 -> 단축 문법

jisoo가 널이 아니라면 isNotEmpty 속성을 달라고 요청

 

한 번 정의된 변수를 수정할 수 없게 만들려면 final을 사용 -> 수정 X

void main(){
  final name = 'jisoo';
}

void main(){
  final String name = 'jisoo'; // 더 구체적으로 해주려면
}

 

latefinal이나 var 앞에 붙여줄 수 있는 수식어초기 데이터 없이 변수를 선언하게 한다

void main(){
  late final String name;
  name = 'jisoo';
}

변수를 먼저 만들고 데이터를 나중에 넣을 수 있게 해 준다

late는 값을 넣기 전에는 접근하지 않아야 한다는 것을 알려주기 때문에 실수를 막아준다

 

javascript나 typescript의 const는 dart의 final과 비슷하다

dart에서 constcompile-time constant를 만들어 준다

const는 컴파일할 때 알고 있는 값을 사용해야 하는데 만약 어떤 값인지 모르고 그 값이 API로부터 오거나 사용자가 화면에서 입력해야 하는 값이라면 const가 아닌 final이나 var가 되어야 한다

const는 컴파일 시점에 바뀌지 않는 값

final은 컴파일 시점에 바뀌는 값으로 사용자가 앱을 실행하면서 변수를 만들 수 있다(API에서 받아온 값, 사용자 입력값

 

 

728x90

'App > Dart' 카테고리의 다른 글

[Dart 시작하기] Section 4  (1) 2024.01.28
[Dart 시작하기] Section 3  (0) 2024.01.24
[Dart 시작하기] Section 2  (0) 2024.01.16