[Dart] - 입문

목차
1. Hello world!
2. Variables
3. Data Types
4. Funtions

1. Hello world!

DartHello world는 어떻게 작성할까?

void main(){
  print('hello world');
}
Dart 파일을 실행하기 위해서는 반드시 main 함수가 필요하다.
이는 Dart 파일을 실행시 Dart는 자동적으로 main 함수를 찾기 때문이다.

출력 함수는 python과 동일하게 print를 사용한다.

 

2. Variables

1) var keyword

Dart는 타입을 자동으로 정해준다.

만약 변수를 수정할 때는 같은 타입으로 해주어야 한다.

var name = "shino72"
관습적으로 함수나 메소드 내부에 지역 변수를 선언할 때 var를 사용한다.

 

2) 명시적 선언

var 키워드를 사용하지 않고 변수를 선언하는 방법에는, 타입을 명시적으로 선언을 해주는 것이다.

아래와 같이 명시적으로 타입을 선언을 해준다.

string name = "shino72"
class에서 변수나 property를 선언할 때에는 타입을 지정해준다.

 

3) Dynamic type

여러가지 타입을 가질 수 있는 변수를 가지는 키워드가 존재한다. 바로 Dynamic이다.

위에서 설명 변수를 수정할 때는 같은 타입으로 해주어야 한다. 라고 했다.

하지만, 아래 처럼 name을 dynamic 타입으로 해주면 가능하다.  또한 dynamic이라고 명시적으로 선언해줄 수 있다.

주로 어떤 타입일지 모를 때 사용한다. 

var name;
name = "shino72";
name = true;

dynamic name;

 

4) Nullable Variables

Dart는 Null safety하다.

어떤 변수가 null이 될 수 있음을 선언을 해주어야 한다. 

아래와 같이 타입뒤에 ?를 붙여서 사용을 한다. name은 null을 허용한다는 뜻이다.

String? name = "shino72";
name = null;

하지만, 이렇게 name을 null safety하게 선언을 해주고, name의 길이를 구하려고, name.length를 사용한다면. name은 null이 될 수 있으므로, length가 사용이 불가하다.

그렇다면 어떻게 사용을 할 수 있을까?

아래의 두가지 방식으로 사용이 가능하다.

void main(){
  String? name = "shino72";
  name = null;
  print(name?.length);
}
void main(){
  String? name = "shino72";
  name = null;
  if(name != null)
  {
    name.isNotEmpty;
  }
}

 

5) Final Variables

final로 선언을 하게 되면, 수정이 불가능하다.

 

6) Late Variables

late는 final이나 var앞에 붙을 수 있다.

late는 초기 데이터 없이 변수를 선언할 수 있게 해준다. (Kotlin의 lateinit느낌?)

 

7) Constant Variables

const는 타입스크립트나 자바스크립트와 다르다.

dart의 const는 complie-time constant이다. 

final과 동일하게 상수로 선언한 것은 수정이 불가능하다. 하지만 final과 다른점은 const는 complie 단계에서 알고 있어야 한다는 것이다.

3. Data types

1) Basic Data Types

기본적인 데이터 타입 (데이터 타입은 모두 object 이다)

  • String
  • bool
  • 숫자형
    • int
    • double

2) Lists

void main(){
  List<int> numbers = [1,2,3,4,5];
  var numbers2 = [1,2,3,4,5];
}

특히 한 경우인데, if문을 사용을 할 수 있다. 아래와 같은 코드에서는 status가 true라면 numbers에 6이 있게 된다.

결과적으로 출력을 하게 되면 [1,2,3,4,5,6]이 출력이 된다.

void main(){
  var status = true;
  List<int> numbers = [1,2,3,4,5,];
  var numbers2 = [1,2,3,4,5, if(status) 6];
  print(numbers2);
}

3) String Interpolation

String Interpolation이란 text에 변수를 추가하는 방법이다. 

사용 방법은 $뒤에 변수 명을 사용하면 된다.

void main(){
  var name = "Shino72";
  var greet = "Hello my name is $name";
  print(greet)
}

만약 정의 되지 않은 변수를 출력하고자 하면 {} 괄호를 사용하면 된다.

void main(){
  var name = "Shino72";
  var greet = "Hello my name is $name, my age is ${12}";
  print(greet);
}

4) Collections For

collections if와 같이 for도 존재한다.

void main(){
  var animals = ["cat","dog"];
  var newAnimals = [
    "lion",
    for(var animal in animals) animal
  ];
  print(newAnimals);
}

변형해서 1부터 100까지 숫자가 담긴 리스트를 만들고자 하면, 아래와 같다.

void main(){
  var numbers = [
    for(var i = 1; i <= 100; i++) i 
  ];
  print(numbers);
}

4) Maps

python의 dictionary이다.

사용 방법도 동일하다.

void main(){
  var informs = {
    "shino72" : 12,
    "shino" : 32,
  };
  print(informs);
}

5) Sets

set은 괄호안에 데이터만 입력해주면 완성이 가능하다.

void main(){
  var numbers = {1,2,3,4};
  print(numbers);
}

4. Funtions

Dart에서 함수 선언은 다음과 같다.

[반환 타입] [함수명](입력 파라미터) { 함수 내용 }

 

아래의 예시는 아무것도 return 하지 않기 때문에 void를 사용하며, 함수명은 sayHi, 입력 파라미터는 String을 받는다.

함수를 실행하면, 입력으로 들어온 name을 출력을 해준다.

void main(){
  sayHi("shino72");
}

void sayHi(String name){  
  print("hello $name");
}

fat arrows syntax도 있다. 만약 곧바로 return을 하고 싶다면, 다음과 같이 표현이 가능하다.

void main(){
  print(sayHi("shino72"));
}

String sayHi(String name) => "hello $name";

Dart는 named Parameter를 지원한다.

아래와 같이 사용이 가능하다.

주의할 점은 Dart는 Null Safety를 지원하기 때문에, 아래 코드와 같이 ?를 통해 null을 허용하거나. default값을 정의를 해준다.

void main(){
  print(sayHi(
    name: null,
    age : 12
  ));
}

String sayHi({String? name, int age = 0}) => "hello $name" ;

다른 방법으로는 required modifier가 있다. 이는 호출시 반드시 name이 있어야 한다는 것이다.

void main(){
  print(sayHi(
    name: "shino72",
    age : 12
  ));
}

String sayHi({required String name, int age = 0}) => "hello $name" ;

named parameter말고 Postional parameter에서 선택적으로 받는 방법도 있다.

중괄호를 사용해주면 된다. 

void main(){
  print(sayHi("shino72"));
}

String sayHi(
  String name,
  [int age = 0]
) => "My name $name My age $age";

QQ operator는 좌항이 null이면 우항을 return 한다.

삼항 연산자랑 비슷하게 사용할 수 있다. 

void main(){
  print(cap("shino72"));
}

String cap(String? name) => name?.toUpperCase() ?? "None";

변수 선언시에도 사용할 수 있다.

void main(){
  String? name;
  name ??= "Shino72";
  print(name);
}

Typedef

Typedef는 타입에 이름을 붙이는 것이다. 아래는 List<int>를 ListOfInts로 사용한다고 선언하는 것이다.

typedef ListOfInts = List<int>;