devlog_zz

[Dart] 2. Dart 문법 및 특징 본문

Front End/Flutter

[Dart] 2. Dart 문법 및 특징

YJ_SW 2022. 5. 20. 14:01
728x90

2. Dart 문법 및 특징

  • 모든 변수는 객체 ( object ) 이다.
  • 타입 어노테이션은 타입이 추론 가능할 경우 옵션이다. - type safe 한 언어이지만, 타입 추론이 가능한 언어이므로 선언시에 타입을 명시하지 않아도 된다.
  • ex ) int number = 10 ; 명시적으로 타입 지정하지 않고 var number = 10 ; 으로 사용 가능
  • var : 변수(mutable)
  • final : 변하지 않는 값(immutable + 런타임 선언 가능)
  • const : 변하지 않는 값(imutable + 컴파일 타임 선언)
  • dynamic : 하나의 변수가 여러 타입으로 변경 가능하다. ⇒ 타입이 예상되지 않을 때
var name = "Kim";
name = 100; 
// 에러 발생 var 변수는 String 타입 지정된 후에 int 타입 참조 불가

dynamic name = "Kim";
name = 100; 
// 가능
  • 제네릭 타입 지원
  • main() 과 같은 최상위 함수 지원
  • private 하려면 식별자 앞에 밑줄 _를 붙인다.

keyword

특별한 의미를 지니는 단어

1. 식별자

변수명, 함수명

내장 식별자는 클래스명, 타입명, prefix( import할 때 이름 )로 사용불가, 함수명으로는 사용 가능

내장 식별자 종류 : https://brunch.co.kr/@mystoryg/117

2. 키워드

특정 문맥 에서 특별한 의미를 가지는 단어 , 특정 문맥이 아닌 곳에서는 식별자로 사용 가능

  • sync
  • async
  • hide
  • on
  • show

⇒ 특정 문맥에서는 특별한 의미, 즉 어떤 동작을 수행하는 역할을 하지만 그 외에서는 함수명이건 변수명이건 간에 사용 가능해야 한다.

bin>dart_application_1.dart

import 'package:dart_application_1/dartEx01.dart' as dartEx01;
import 'package:dart_application_1/dartEx01.dart' show TestA; 
// TestA 클래스만 show 키워드를 통해 사용가능하도록
// => 특정 부분만 import 하라는 의미를 가지면서 함수명으로 사용 ( 키워드의 특징 만족 )

show(int a, int b) {
  return a + b;
}

void main(List<String> arguments) {
  var numberA = 10;
  var numberB = 25;
  var result = show(numberA, numberB);
  dartEx01.printResult(result);

	var test = TestA(); 
// var test = TestB(); 하면 오류 - 선택하지 않은 TestB 클래스를 사용하려고 해서

  test.show();
}

lib> dartEx01.dart

printResult(int aNumber) {
  print('The number is $aNumber.'); //print to console.
}

class TestA {
  show() { // 클래스에 show()라는 멤버함수 
    print('TestA');
  }
}
class TestB {
  show() {
    print('TestB');
  }
}

Result

The number is 35.
TestA

3. 예약어

식별자로 사용할 수 없는 특별한 단어

비동기 지원 관련 예약어 : async, async*, sync* 로 표시된 함수의 바디에서는 식별자로 사용 불가

비동기/동기 함수 바디가 아닌 곳에서는 var await = 10; 사용 가능

but 비동기/동기 함수가 있는 바디에서 await를 변수명으로 사용하면 오류발생

타입

Type

var name = "Kim";
var cnt = 10;

name = 100; // error 

var 타입을 사용하여 타입을 지정하지 않고 명시적으로 사용 가능

But, 초기화된 타입 외의 다른 타입의 값을 가질 수 없다 .

dynamic name = 1000;
name = 'Kim';

or
Object name = 1000;
name = 'Kim';

dynamic 과 Object 는 타입 변경 가능하다.

var 사용 지양

var number ;
number = 10;

// 선언부에서 타입을 알 수 없으므로 var 사용 지양하는게 좋다.

num

num 타입 int, double 모두 참조 가능, int double은 서로 참조 불가

num a = 10;
int b = 20;
double c = 2.6;

a = b;
a = c;

b = c; //error
b = b; //error

const

const 는 컴파일 시점에 상수화

final 은 런타임에 상수화

get {
	return 100;
}

final a = get();
const b = get(); // 에러 발생!

 

출처 : https://brunch.co.kr/brunchbook/dartforflutter 스터디하며 정리한 글입니다. 감사합니다.

728x90
Comments