ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다트 Dart 언어란? (특징, 기초문법)
    플러터 Flutter 2021. 2. 20. 18:18
    반응형

    - 다트 Dart란?

    • google 구글이 javascript 자바스크립트를 대체하기 위해 2011년 개발한 웹프로그래밍 언어  (https://dart.dev/)
    • 모바일 앱, 웹 앱, 명령어 스크립트, 서버 프로그래밍 등 어떤 것이든 다트를 사용해 만들 수 있다.
    • 웹앱이 아닌 네이티브 코드로 안드로이드나 iOS용 앱을 동시에 개발 할 수 있다.
    • java랑 유사한 문법으로 몇가지 특징만 숙지하면 쉽게 개발 할 수 있다.

    - 다트 Dart의 특징

    1. 모든 것들이 전부 Object 로 취급한다.

    • Variable 안에 넣을 수 있는 것은 전부 Object.
    • Fuction, number, null 전부 Objcet로 취급 된다.
    • 변수에 넣을 수 있는 모든 것은 객체이며, 모든 객체는 클래스의 인스턴스로 취급.

    2. List<int>, List<dynamic> 같은 제너릭 type을 지원

    • Ex) List<dynamic> list = [0,1,”2”,3,false,true] 같은 형식이 가능 (전부 오브젝트로 취급되기 때문)

     

    3. Typed 언어지만 자유도를 준다.

    • 기본적으로는 typed 언어지만, Var, dynamic으로 선언하면 동적 type으로 사용 가능
    • Var : type을 지정하지 않아도 dart 에서 알아서 variable의 type이 뭔지 추측을 함. 다른 타입을 재대입 할 수 없음.
    • Dynamic :모든 dart 객체의 기본 Object, 명시적으로 사용, 서로 다른 타입을 지정할 수 있으며, 다른 타입을 재대입할 수 있음.

     

    4. Public, private, protected 의 정의가 없으며, _fuction()으로 정의 된다.

    • Private 인 _은 class 안에서만 접근 가능한 것이 아닌, dart page 단위로 private 정의 된다.

     

    다트의 특징 참조 블로그

    medium.com/@tkdgy0801/flutter-%EA%B0%9C%EB%B0%9C%EC%9D%84-%EC%9C%84%ED%95%9C-dart-%EC%96%B8%EC%96%B4-%ED%95%B5%EC%8B%AC-%ED%8A%B9%EC%A7%95%EC%9C%BC-48dc1e6ccb68

     

    - 다트 문법

    1. 출력하기 print(); 

    void main() {
    
      print('hello Dart');  //hello Dart
      
    }

     

    • main함수 블럭안에서 실행해야 출력이 된다.

    2. Defulat Data Type

    void main() {
    
      //정수 & 사칙연산
      int number1 = 17 ~/ 4; //나누기
      print(number1); //4
      int number2 = 17 % 4; //나머지 몫 구하기
      print(number2); //1
      
      //소수
      double pi = 3.14 / 2;
      print(pi); //1.57
      
      //문자
      String dart = '다트';
      print(dart); //다트
      
      //참, 거짓
      bool visible = true;
      print(visible); //true
      
      //리스트 List
      List list = [1, 2, 3];
      print(list); //1, 2, 3
      print(list[1]); //2
      
      //맵 Map  key : value
      Map car = {'model': '소나타', 'price': '2000'};
      print(car); //{model: 소나타, price: 2000}
      
      
      
    }

     

    3. var

    • 변수를 지정할 때 앞에 타입을 써주지 않고 처음 선언한 값이 데이터 타입이 된다.
    void main() {
      var age = 25;
      print(age) //25
      age = '다트';
      print(age); //에러 발생
    }

     

    4. final과 const

    공통점

    • 값을 한 번만 선언 할 수 있다. 다른 값으로 변경시 오류 발생
    • final pi = 3.14;  final 뒤에 double 이란 타입을 명시해주지 않아도 자동으로 타입이 추론된다.

     

    void main() {
      final double pi1 = 3.141592;
      const double e1 = 2.71828;
      final pi2 = 3.141592;
      const e2 = 2.71828;
    }

    차이점

    • const 의 경우, 컴파일 타임에서 상수를 정의할 수 있다.즉 const 로 정의한 상수는 런타임에서 정의되는 값을 설정할 수 없다.
    • 예를 들어 DateTime.now() 의 경우 런타임에서 호출 될 때마다 결과 값이 다른데 이러한 값은 const 로 설정할 수 없다. 결국 const 로 설정하는 값은 대부분 리터럴이 될 것이다.
    const DateTime now = DateTime.now();
    
    //에러 발생 
    //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();
    
    final DateTime now = DateTime.now(); // 에러 없음

    모든 인스턴스화 과정에서 const를 사용할 수 없는 것은 아니다. 

    ex) Color class가 있고 아래의 생성자가 정의 되있다.

    const Color(int value);

    Color 클래스의 생성자 const로 선언되어 있으며, 이러한 생성자를 사용하여 선언하는 변수에는 const를 사용할 수 있다.

    const color = Color(0xFF42A5F5);

    앞에서 본 DateTime.now() 의 경우, 생성자를 보면 const로 선언되어 있지 않기 때문에 이를 인스턴스화 할 때에는 const사용할 수 없다.

    final과 const는 배열을 선언하는 과정에서 또 다른 차이가 있다.

    final List<String> finalList = [];
    const List<String> constList = [];
    
    finalList.add('final');
    constList.add('const'); // compile error
    finalList = ['Java']; // complie error
    
    

    finalLis는 리스트에 값을 추가 할 수 있지만 constList는 값을 추가 할 수 없다. 두 리스트 모두 새로운 리스트로 변경하는 것은 불가능 하다. 결국 final 로 선언된 변수는 해당 변수에 새로운 값이 설정되는 것은 불가능하지만, 객체나 배열에 값을 추가는 가능하다.

     

    5. if / else if / else문

    void main() {
    
      int score = 100;
    
      if (true) { //괄호 안에 조건이 true 이면 실행 됨
        print('true'); //참 
      }else if(score >= 100){
        print('이상');
      }else if(score != 100){
        print('아니다');  
      }else if(score == 100){
        print('같다');
      }else {
        print('기타');
      }
    }

     

    6. for, while문

    void main() {
    
      // Type 1
      for (int i = 1; i <= 10; i++) {
        print(i);
      }
      
      // Type 2
      List list = [11, 12, 13];
      
      for (var i in list) {
        print(i);
      }
      
    }

     

    while 문은 조건이 끝날때까지 실행된다. 브레이크를 걸지 않으면 무한루프에 빠지기 때문에 주의한다. 

    void main() {
    
      int score = 0;
      while (score < 6) {
        score += 1;
        print(score);
      }
      
    }

     

    기초 문법의 출처 chajinjoo.netlify.app/dart/200220_dartBasic/

    반응형

    댓글

Designed by Tistory.