다트에 대하여[1]

다트의 기본적인 문법을 공부합니다.
Posted on 2022-01-24 by GKSRUDTN99
Flutter Dart

다트에 대하여

다트 언어의 9가지 특징

  1. 다트는 main()함수로 시작합니다.
  2. 다트는 어디에서나 변수를 선언하고 사용할 수 있습니다.
  3. 다트에서는 모든 변수가 객체입니다. 그리고 모든 객체는 Object 클래스를 상속받습니다.
  4. 다트는 자료형이 엄격한 언어입니다. 즉, 변수에 지정한 자료형과 다른 유형의 값을 저장하면 오류가 발생합니다. 만약 다른 자료형을 허용하려면 dynamic 타입을 이용할 수 있습니다.
  5. 다트는 제네릭 타입을 이용해 개발할 수 있습니다. 또한 List<int> 처럼 int형을 넣을 수도 있고, List<dynamic>처럼 다양한 데이터를 넣을 수도 있습니다.
  6. 다트는 public, protected와 같은 키워드가 없습니다. 만약 외부로 노출하고 싶지 않다면 변수나 함수 이름 앞에 언더스코어( _ )를 이용해 표시할 수 있습니다.
  7. 변수나 함수의 시작은 언더스코어 또는 문자열로 시작하고 그 이후에 숫자를 입력할 수 있습니다.
  8. 다트는 삼항 연산자를 사용할 수 있습니다. Swift와 유사한 방식으로 사용할 수 있습니다.
  9. Null safety를 지원합니다. Flutter 2.0에서 새롭게 추가된 기능입니다.

예시 코드

✅ 간단한 다트 코드 실행은 여기를 이용하면 편리합니다.

// 함수 정의
printInteger(int aNumber) {
    print('The number is $aNumber.'); // 콘솔에 출력
}

// main() 함수에서 시작
main() {
    var number = 42;
    printInteger(number);
}

위 코드를 실행해보면 'The number is 42.'가 콘솔에 출력되는 것을 확인할 수 있습니다.

main() 함수의 내용을 차례대로 살펴보면

var 키워드는 자료형을 특정하지 않고 변수를 선언할 때 사용합니다.

만약 자료형을 특정하고 싶다면 int, String, double등 다트가 제공하는 자료형으로 선언합니다.

다음으로, number 변수를 인자로 printInteger() 함수를 호출합니다.

printInteger() 함수는 int형 변수를 매개변수로 받아 콘솔 화면에 출력하는 사용자 정의 함수입니다.

다트에서 문자열을 표현할 때는 큰따옴표 또는 작은따옴표를 이용하는데,

이 때 따옴표 안에 $(표현식)과 같은 형태로 사용하면 표현식에 변수를 직접 넣을 수 있습니다.

다트 언어가 제공하는 주요 자료형들을 다음과 같습니다.

  • 숫자
    • int : 정수형 숫자
    • double : 실수형 숫자
    • num : 정수형 또는 실수형 숫자
  • 문자열
    • String
  • 불리언(True or False)
    • bool
  • 자료형 추론
    • var : 입력받은 값에 따라 자료형이 결정됩니다. 한 번 결정된 자료형은 변경할 수 없습니다.
    • dynamic : 입력받은 값에 따라 자료형이 결정됩니다. 한 번 결졍된 자료형이 바뀔 수도 있습니다.

Null safety

변수를 선언할 때 사용하는 것으로, 자료형 다음에 ?를 붙이면 Null이 가능하고 붙이지 않으면 Null이 불가능합니다.

반대로 식 다음에 !를 붙이면 Null이 아님을 직접 표시합니다.

int? couldReturnNullButDoesnt() => -3;                  // null을 넣을 수 있습니다

void main() {
    int? couldBeNullButIsnt = 1;
    List<int?> listThatCouldHoldNulls = [2, null, 4];   // List의 Element가 null일 수 있습니다
    List<int>? nullsList;                               // List 자체가 null일 수 있습니다
    int a = couldBeNullButIsnt;                         // 만약 couldBeNullButIsnt에 null이 들어있다면, 오류가 발생합니다
    int b = listThatCouldHoldNulls.first;               // 윗 줄과 달리, List의 첫 원소가 null이 아니라도 오류가 발생합니다
    int b = listThatCouldHoldNulls.first!;              // List의 첫 원소가 null이 들어있을 때만 오류가 발생합니다
    int c = couldReturnNullButDoesnt().abs();           // null일 수도 있으므로 abs()에서 오류가 발생합니다.
    int c = couldReturnNullButDosent()!.abs();          // null이 아님을 명시적으로 표시했으니 오류가 발생하지 않습니다
}

Swift에서 제공하는 Null Safety기능과 거의 동일하게 사용이 가능한 듯 합니다.

차이점은 변수에 다른 변수에 값을 할당 할 때, int형 변수에 int?형 변수의 값을 아예 대입할 수 없지만,

Dart는 null이 들어있지 않다면 대입이 가능합니다.