App_Dev/Flutter

[ 앱 개발자 도전기 : 크로스플랫폼_Flutter & Dart ] Flutter 개발을 위한 Dart 문법 간단 정리. - 변수

안다미로 : Web3 & D.S 2024. 11. 14. 22:34

 

 

 

 

[ 앱 개발자 도전기 : 크로스플랫폼_Flutter & Dart ] 

Flutter 개발을 위한 Dart 문법 간단 정리. - [1] 변수

 


 

∇ Dart 문법 간단 정리 - 변수

목   차

1. 다트의 기본 변수 타입
2. 다트 변수 키워드

 


Ⅰ. 다트의 기본 변수 타입.


 

     -  다트는 타입 언어입니다.

     -  변수마다 타입을 지정해줘야 합니다.

     -  기본적으로 null safety가 적용되어 있어서, 

          null을 사용하려면, 타입 키워드 뒤에 ?을 붙여주어야 합니다.

 

     - C++템플릿과 마찬가지로, 다트에선 제네릭을 제공합니다.

 

     - C++의 auto와 마찬가지로 타입 추론을 지원합니다.  

          - > var변수(기본적으로 컴파일러가 알아서 타입을 추론)

 


 

num

   : int 와 double 형 변수를 모두 나타냅니다.

	num number1 = 10; 
	num number2 = 10.0;

 


int

   : integer 32비트 정수형입니다.

int number = 10

 

double

   : double 64 비트 정수형입니다.

double number = 10.0;

 


String

   : 문자열을 나타냅니다.  C++의 std::string 과 같은 역할입니다.

        다트에선 String, List 등과 같은 컨테이너는 앞 글자가 대문자임에 주의해야 합니다.

String str1 = "Hello world";

 

 bool

   :  참(true) 과 거짓(false)를 나타내는 논리값입니다.

	bool flag0 = true; 

	bool flag1 = false;

 


● dynamic

   :  어떤 타입이든 받을 수 있습니다.   C++의 std::any 와 비슷합니다.

          또는 파이썬 * 자바스크립트와 같은 타입리스 형 언어들과 비슷한 역할입니다.

	dynamic a = 1; 

	a = 'hello'; 

	a = 1.1; a = true;

      위 코드에서 dynamic으로 선언된 a에 대해 어떠한 타입이든 대입하는 것도 허용됩니다.


 

● List

   :  리스트 양식입니다. 

      C++의 std :: list 처럼 더블 링크드 리스트의 '리스트'는 아니고, 

      C++의 std :: vector 와 같이 '배열 형태' 로 구현되어 있습니다.

 

       위에서 말한 String 처럼 첫글자가 대문자임에 주의해야합니다.

	var list1 = [1, 2, 3]; 

	var list2 = [0, ...list1]; 

	print(list2); // [0, 1, 2, 3]

	List<String> list_str = ['a', 'b', 'c']; 

	List<int> list_int = [1, 2, 3]; List<num> list_num = [1, 2, 3, 3.14]; 

	List<dynamic> list_dynamic = [1, 2, 3.14, 'a', 'b', true];

 

      ->  list2를 보면,  ... 이란 연산자를 사용합니다.

             이는 Spread Operator라 하며, " 한 리스트 안에 또 다른 리스트를 삽입할 때 " 사용합니다.

 

       ++ List에는 length 등의 편리한 메소드 함수들을 추가 제공합니다.

 


 

 

● Map

   :  C++의   std :: unordered_map과 같습니다.

            -> key들이 정렬되지 않음을 주의해야합니다.

       + 대신, 해시맵과 마찬가지로 O(1)의 시간 안에 삽입 삭제가 이루어집니다.

 

var gifts = { // Key: Value 'first': 'partridge', 'second': 'turtledoves', 'fifth': 'golden rings' };

var nobleGases = {  

2: 'helium',  
10: 'neon',  
18: 'argon',  

};

 

        - gifts의 타입은 Map<String, String>이고,  nobleGases의 타입은 Map>int, String> 입니다.

 

             ++ Map constructor를 이용하기도 합니다.

	var gifts = Map<String, String>();
	gifts['first'] = 'partridge';
	gifts['second'] = 'turtledoves';
	gifts['fifth'] = 'golden rings';

	 

	var nobleGases = Map<int, String>();
	nobleGases[2] = 'helium';
	nobleGases[10] = 'neon';
	nobleGases[18] = 'argon';

 

 

● Set

   :  C++의   std :: unrodered_set 과 같습니다.

     집합의 느낌.

	var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

	Set<int> numbers = { 1, 3, 5, 7 };

 

   *  Set에는 {}를 사용하고,   Map에는 [] 를 사용한다는 점을 기억!


Ⅱ. 다트의 기본 변수 키워드.


 const, final

   

        - const는 컴파일 상수로,  C++의 constexpr의 역할입니다.

 

        - final은 상수화로, C++의 const와 같습니다.

 

         - const, final은 사용할 수 있는 곳에 모두 사용하는 것이 좋습니다.

 

 

●  Late variables

         - 다트는 기본적으로 null safe 언어이기 때문에, 처음 변수를 선언하면 무조건 초기화를 해주어야 합니다.

         - but, 초기화가 선언 이후에 되어야 하는 경우, 

                   late 키워드를 붙여서 , 후에 값을 가질 것이라는 것을 컴파일러에게 인지시킬 수 있습니다.

 

	late String description;

	void main() {
	  description = 'Feijoada!';
	  print(description);

	}

 

      ++late를 사용하는 시나리오는  두 가지 경우.

               - 선언 이후에 초기화되는 non-nullable 한 변수를 만들 때

               - 뒤늦게 초기화되는 변수.

 

 

 

●  ? 키워드

 

       - 다트는 기본적으로 null safe한 언어이기에 그냥 변수를 선언하면, 모두 non-nullable합니다.

       - 그러나, 변수의 타입 뒤에 ?를 붙여준다면 nullable한 변수를 만들 수 있습니다.

 

	  int? lineCount;
      
	  print(lineCount); // null
	  assert(lineCount == null);