Flutter Dart 정리

Hyunsoo Jung·2024년 1월 23일
0

Flutter

목록 보기
2/15

1. Dart란

  • 객체지향소프트웨어
  • ui에 최적화
  • 두개의 컴파일러(dart web, dart native)를 가짐
    • 다트 코드를 맞는 환경의 코드로 변환해주기 때문에 한번 개발로 Android, IOS, Web 어디에서든 실행할 수 있음
      • dart web : 다트 코드를 자바스크립트로 변환
      • dart native: 다트 코드를 cpu에 맞는 코드로 변환 ex) RAM32, RAM64, X86_64
  • 다트를 수정해서 플러터를 더 빠르게 할 수 있음
    • 지금 AOT도 플러터를 위해서 만들어졌으며 언제든지 최적화를 할 수 있음

2. Dart의 컴파일러

  • JIT(Just-In-Time)
    • 다트의 VM을 이용해 코드의 결과를 바로 화면에 보여줌
      (코드 결과를 확인하고 싶을때마다 컴파일을 하게 되면 비효율적임)
      • 가상머신을 이용하기 때문에 속도가 느려 개발시에만 사용
  • AOT(Ahead-Of-Time)
    • 컴파일을 후에 기계어를 배포
      • 개발이 끝나고 실제 배포시에만 사용

3. Dart의 variable(변수)

  • null safety 지원
    • null값은 유용할 수 있기 때문에 ?를 사용하여 null값이 있어도 실행할 수 있게 함
      • String? name = null
  • var, final
    • var은 동일한 데이터 타입에서 데이터를 변경할 수 있고, final은 변경 할 수 없음
      • var name = "hyunsoo"; final age = 24;
      • name = "hyunsoo24"; (o), age = 23; (x)
  • dynamic
    • 어떤 데이터 타입인지 모를때 타입을 확인할 수 있게 도와줌
      • dynamic age; if(age is String)
  • late
    • 수식어로써 초기에 데이터 없이 변수를 선언할 수 있음
      • late var name;
  • const
    • final이랑 동일하게 데이터를 변경할 수 없고, 추가적으로 컴파일 전에 알고 있는 값
      • 컴파일 전에 데이터를 알고 있다면 const를 쓰고, 모른다면 final을 씀

4. Dart의 Data Type

  • String, bool, double, int
    • 모두 선언시 객체로 인식하고, num은 int와 double의 부모클래스
  • List, collection if
    • List는 데이터들을 나열하고, collection if는 List에 조건을 붙여 조건에 만족시 데이터를 추가함
      • List num = [1, 2, 3, 4]; var check = true;
      • List number = [1, 2, 3, if(check) 4];
  • String interpolation
    • text에 변수를 추가하는 방식
      • var name = "hyunsoo"; var add = 2;
      • var fullName = "jyng $name ${1 + add}";
  • collection for
    • 반복문안에서 새로운 변수를 지정하여 코드를 효율적으로 반복할 수 있도록 함
      • var oldName = ["a", "b", "c"];
      • var newName = ["A", "B", "C", for(var name in oldName)"old $name"];

6. Dart의 Class

  • 타입을 명시해줘야 하고, 객체 생성시 new 안써도 됨
    class Person{
       late final String name;//var x
       late final int age;
    }
    
    void main(){
    	var man = Person();
    }
  • 타입 지정을 했다면 생성자 코드 최소화
    
    class Person{
    	late final String name;
        late final int age;
    
        Person(this.name,this.age)//최소화
     }
  • Named Constructor Parameter
    • function에서 했던 Named Parameter를 많이 사용
      
      class Person{
      	late final String name;
          late final int age;
      
          Person({required this.name, required this.age})//최소화
       }		
      
      void main(){
      	var man = Person(age:24, name:"hyunsoo");
      }
  • Named Constructors
    • function을 통해서 접근
      
      class Person{
      	late final String name;
          late final int age;
      
          Person.createChild({required this.name, required this.age}):
      	this.name = name, this.age = age;
       }		
      
      void main(){
      	var man = Person.createChild(name:"junior",age:1);
      }
  • Cascade Notation
    • 생성자 선언후, ..으로 변경할 수 있음
      
      class Person{
      	late final String name;
          late final int age;
      
          Person.createChild({required this.name, required this.age}):
      	this.name = name, this.age = age;
       }		
      
      void main(){
      	var man = Person.createChild(name:"junior",age:1)
          ..name = "hyunsoo" ..age = 2; 
      }
  • Enum Class
    • Class에 붙여서 접근하게 하고, 실수를 방지할 수 있음
      
      enum Team{soccer, basketball};
      
      class Person{
      	late final String name;
          late final int age;
          String Team team;
      
          Person.createChild({required this.name, required this.age, required this.team}):
      	this.name = name, this.age = age, this.team = team;
       }		
      
      void main(){
      	var man = Person.createChild(name:"junior",age:1, team:Team.soccer)
          ..name = "hyunsoo" ..age = 2; 
      }
  • Abstract Class(추상화 클래스)
    • 다른 Class에서 구현해야 하는 것을 나열
      
      abstract class Project{void report();};
      
      class Person extends Project{   
          void report(){print("report");};
       }
  • Inheritance(상속)
    • 부모에 할당받아 중복된 코드 작성 x
      
      enum Team{soccer, basketball};
       
      class Project{
      	late final String name;
          Project(this.name);
      	void report(){print("family report");};
      }
      
      class Person extends Project{
          late final int age;
          String Team team;
      
          Person({required this.name, required this.age, required this.team})		
          :super(name: name);
      
          @override void report(){print("child report");};
       }		
      
      void main(){
      	var man = Person.createChild(name:"junior",age:1, team:Team.soccer)
          ..name = "hyunsoo" ..age = 2; 
      }
  • 9) Mixin
    • 생성자가 없는 클래스를 with이라는 키워드를 사용해 그 클래스들의 메소드와 데이터들을 가져옴
      
      enum Team{soccer, basketball};
      	
      class Project{
      	late final String name;
          void report(){print("family report");};
      }
      
      class Person with Project{
          late final int age;
          String Team team;
       }
profile
안드로이드 네이티브 Kotlin과 크로스 플랫폼 Flutter를 잘 활용하면서 공익적 가치를 실현하는 앱 개발자

0개의 댓글