본문 바로가기
Hybrid/Flutter

Dart] 1. 기초문법

by 김마리님 2024. 6. 13.

Dart를 보고 있으면.. 뭔가 어디선가 본 언어들이 다 짬뽕되어 있는 기분이다.

기초문법을 보면 개발 한번 해본 사람들이면 Aㅏ.. . 할 수 있다. 바로 보자.

 

1. 메인함수

void main() {
  
}

 

(꼭 C++ 보는 것 같네)

 

 

2. 주석

void main() {
  // 한줄 주석입니다
  
  /*
   * 여러줄 주석입니다
   * 여러줄 1
   * 여러줄 2
   * 여러줄 3
   * */
  
  /// 이것은 문서 주석입니다.
  
}

 

 

3. print(console) 함수

void main() {
  print('Hello world!');
}

(코틀린을 쓰던 사람은 ; 붙이는게 안 익숙하다.)

 

 

4. 변수선언

1) var

var은 자동으로 변수의 타입을 추론해준다. 따라서 명시적으로 타입을 선언하지 않아도 된다. 

따라서 해당 코드는,,

void main() {
  // var 선언
  var name = 'Mary';
  print(name);
  
  name = 'Mary Kim';
  print(name);

}
Mary
Mary Kim

 

다음과 같이 출력된다.

해당 변수가 선언 될 때, 타입이 추론되어 고정되므로,

void main() {
  // var 선언
  var name = 'Mary';
  print(name);

  name = 1;
  print(name);
}

 

이렇게 타입을 다르게 하여 변수의 변경을 유도하면,

compileDDC
main.dart:9:10: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  name = 1;

 

다음과 같은 컴파일 에러를 출력한다.

 

 

2) dynamic

앞에서 var의 경우 선언할 때 변수의 타입이 고정되어 다른 타입의 값이 들어올 때 컴파일 에러를 출력한다고 했다.

그런데 Dart에는 변수의 타입을 바꿀 수 있는(!) 변수 키워드가 존재한다. 그것이 dynamic 이다.

void main() {
  // dynamic 선언
  dynamic name = 'Mary';
  print(name);
  
  name = 1;
  print(name);
}
Mary
1

 

놀랍게도 컴파일 에러를 출력하지 않는다.

 

 

3) 불변 변수

불변 변수라 함은.. 코틀린을 쓰는 사람은 val, 자바스크립트 쓰는 사람은 const, 자바를 쓰는 사람은 final 이 익숙하다.

근데 Dart는 const, final 두 가지를 다 사용한다(!)

void main() {
  // final 선언
  final name = 'Mary';
  print(name);
  
  name = 'Marrry';
  
  // const 선언
  const name2 = 'Mary';
  print(name2);
  
  name2 = 'Marrry';
  
}

 

둘 다 다음과 같은 오류를 출력한다.

compileDDC
main.dart:6:3: Error: Can't assign to the final variable 'name'.
  name = 'Marrry';
  ^^^^
main.dart:12:3: Error: Can't assign to the const variable 'name2'.
  name2 = 'Marrry';
  ^^^^^

 

네 바꿀수 없으시답니다.

 

근데 그럼 const 랑 final의 차이는 무엇이냐?

final은 런타임 상수이며, const는 빌드타임 상수이다.

이건 또 무슨 소리냐.. DateTime.now()로 알아보자. 다음의 함수는 함수가 실행되는 순간의 날짜와 시간을 출력한다. 즉, 해당 매서드가 빌드되어야 값을 알 수 있다는 소리이다.

따라서, 코드가 run이 될 때 확정되는 final 함수의 경우 해당 코드가 오류가 발생하지 않는다.

void main() {
  // final 선언
  final now = DateTime.now();
  print(now);
}
2024-06-13 07:19:22.973

 

이번엔 const를 넣어보자.

void main() {
  // const 선언
  const now = DateTime.now();
  print(now);
}
compileDDC
main.dart:3:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
  const now = DateTime.now();

 

즉, 나는 이 값을 예상할수가 없는데 어케알아 ㅇㅅ;;ㅇ 입니다.

즉, DateTime이 const보다 나중에 실행되기 때문에 나는 값을 몰라! 이다.

 

이를 주의하면서 const와 final을 사용해야한다.

 

 

5. 변수타입(자료형)

 

var은 굳이 자료형을 선언하지 않아도 되지만,, 자바스크립트를 사용해본 분들은 알겠지만 자료형이 있는게 훨씬훨씬훨씬 가독성이 높다.

자료형이야.. 뭐.. 다 쓰는 것들이다.

void main() {
  
  // 자료형
  String name = 'Mary';
  int age = 17;
  double height = 212.8;
  bool isMan = false;
  
  print(name);
  print(age);
  print(height);
  print(isMan);
}
Mary
17
212.8
false
반응형

'Hybrid > Flutter' 카테고리의 다른 글

Flutter] 백버튼 이벤트 처리  (0) 2024.07.04
Dart] 2. Collection  (1) 2024.06.14