AR삽질러

Dart Variables- (2) 본문

Dart

Dart Variables- (2)

아랑팡팡 2023. 8. 26. 14:50
728x90

1. Dart main함수

우선 Flutter로 앱개발을 하기 앞서서 Dart공부를 하기로 했다.

오늘은 Dart의 main함수부터 배워보고 같이 개발하는 친구에게 설명해줄 생각이다.

기본적으로 Dart와 Flutter의 공부는 VSCode에서 진행한다.

 

설치 및 환경설정후 초기화면

void main() {
  print('Hello world!!');
}

 

main함수는 모든 Dart프로그로밍의 Entry Point이다.

반드시 'hellow world'전에 main method가 있어야한다.

Python과 비슷하지만 꼭 ";"세미콜론을 붙여야한다.

 

2. Dart 변수(Variable)

 

2-1) 변수를 선언하는 방법1

 var를 선언하여 변수를 만드는 방법

 - 함수나 메소드 내부에 local variable을 선언할떄는 var를 사용한다.

void main() {
  var name = 'AR';
}

Dart에서는 변수의 타입을 선언할 필요가 없다. 이유는 Dart 컴파일러는 name이 String(문자열)이라는것을 알고 있기 때문이다.

 

만약 변수를 재사용하고 싶다면 본래 타입과 일치해야한다. 현재 String(문자열) name을 int(정수형)으로 바꿀수 없다.

Dart에서는 타입선언은 필요없지만 타입은 같아야 한다.

 

2-2) 변수를 선언하는 방법2

 var를 선언하지 않고 타입을 선언하여 변수를 만드는 방법

 - 필요시 언제든 var에서 String으로 변경할 수 있다.

 

3. Dynamic타입

 여러가지 타입을 가질 수 있는 변수에 사용하는 키워드로 해당 변수의 타입을 알 수 없을 때 주로 사용된다.)

변수를 선언할 때 dynamic을 사용하거나 값을 지정하지 않으면 dynamic타입을 가지게된다.

void main(){
	var name;
}

이렇게 변수를 선언했지만 값을 지정하지 않으면 dynamic타입을 가지게된다.

void main() {
  var name;
  name = 'AR';
  name = 10;
  name = false;
}

dynamic은 이렇게 다른 타입을 선언하는 것이 가능하다. 그럼 이 쓸모없어 보이는 dynamic은 무엇일까..

 

이런식으로 들어오는 데이터의 타입을 알 수 없을 경우 dynamic을 이용하여 타입을 확인할 수 있어 유용하게 사용할 수 있다.

 

 

4. Null Safety

 - Null Safety는 개발자가 null값을 참조할 수 없도록하는 기능이다.

만약 null값을 참조하는 코드를 생성하면 런타임에러가 발생한다.

void main(){
	isEmpty(null);
}

bool isEmpty(String string) => string.length == 0;
void main(){
	isEmpty(null);
}

위와같이 String(문자형)타입의 데이터가 null이기 때문에 에러가 발생한다.

 

Dart에서는 이러한 null값을 허용하지 않기 위해서 "?" 를 사용한다.

예로 String(문자형)과 null을 사용하고 싶다면

void main(){
	String? ar = 'AR';
    ar = null;
}

타입뒤에 "?"를 붙여주는 것으로 Dart에서 변수 ar이 String일수도 null일 수도 있다는것을 인식하게된다.

 

이 변수를 사용하기전에 조건문 검사를 통해준다.

조건문1)

void main(){
	String? name = 'name';
    name = null;
    if(name != null){
    	name.isNotEmpty;
    }
}

조건문2)

void main(){
	String? name = 'AR';
    name = null;
    name.isNotEmpty;
}

 

 

5. 상수 Final Variables

 - 상수Final과 Const 키워드는 값을 변경할 수 없는 변수를 선언할 수 있다. 

Final

 - 런타임에서 값이 할당될 수 있고 선언 시점이나 런타임에서 한번만 값을 할당할 수 있다.

 - final 변수의 값을 런타임 동안 변경할 수 없기 때문에 선언시나 생성자에서 초기화를 해야한다.

 

 - 만약 변수에 String(문자형)을 선언한뒤 int(정수형)을 넣을 수는 없다.

void main(){
	String name = 'AR';
    name = 'RA';
    name = 12;
}

 

 

값이 변경되지 않게 하기 위해 final 로 변경해줘야한다.

void main() {
  final String name = 'AR';
  name = 'RA';
}
void main() {
  final name = 'AR';
  name = 'RA';
}

 

6. Late Variables

 - late는 final이나 var앞에 붙는 수식어다.

 - 변수를 나중에 초기화 할 수 있는 방법을 제공하는 기능으로 late 키워드를 사용하여 나중에 초기화될 변수를 선언할 수 있다.

즉, Late Variables 를 사용하면 변수를 선언할 때 즉시 초기화하지 않아도 나중에 들어오는 값을 할당하는 것이 가능하기 때문에 조건에 따른 로직을 구현할 수 있다.

void main() {
  late final String name;
  name = 'AR';
  name = 10;
}

하지만 이역시 final이 붙어있기 때문에 단 한번만 값을 할당할 수 있다. 

 

7. Contant Variables

 Const 키워드는 앞의 final과 유사하다. const는 compile-time constant를 만들어 변수에 한번 값을 할당하게 되면 수정할 수 없는 상수가 된다. 

 - const는 값을 알고 있어야한다는 점이 다르다.

 - final은 어떤 값이 들어올지 모르거나 입력값을 받을때 final이나 var를 사용할 수 있다.

 

9. Dart Variables 정리

 

9-1) Type

메소드나 작은 함수안에서 지역변수를 선언할때 var를 사용하는 것이 추천된다.

void main(){
	int a = 10;
    var name = 'AR';
}
void main(){
	int a = 10;
    var name = 'AR';
    a = 10000;
    name = 'nico';
}

변수의 타입을 지키면서 값을 수정하는 것이 가능하다.

 

9-2) 상수

final 변수에 값을 한번만 할당하여 변할 수 없는 값을 만들때

void main(){
	final name = 'AR';
    name = '100';  // 불가
}

 

9-3) dynamic

dynamic은 자주사용하는 것은 좋지 않지만 들어오는 데이터의 타입을 모를떄 사용한다.

타입이 dynamic이라면 변수에 String, int등이 들어올 수 있다.

void main(){
	dynamic name;
    name = '100';
    name = 12;
    name = false;
}

 

 

정해지지 않은 타입을 사용하기 때문에 dynamic을 사용하기 전에 조건문을 통해 확인을 해줘야한다.

void main() {
  dynamic name;
  if(name is String){
    name.
  }
}

 

9-4) const

const는 수정할 수 없는 상수값이며 컴파일시 값을 가지고 있는 변수를 만드는 방법이다.

final은 런타임 중에 만들어질 수 있고 const는 런타임중에 만들어질 수 없기 때문에 미리 값을 할당해야한다.

void main() {
  const name = 'AR';
  name = 'RA';
  
  final String name; // 가능
  const // 불가
}

 

9-5) nullable

nullable은 null값을 참조하지 못하게 해준다.

void main() {
  String name = 'AR';
  name = null;
}

하지만 null이 필요할 경우 "?"룰 추가해준다.

void main() {
  String? name = 'AR';
  name = null;
  if (name != null) {
    name.isEmpty;
  }
}
void main() {
  String? name = 'AR';
  name = null;
  name?.isEmpty;
}

 

9-6) Late

late는 final, var, String등 타입앞에 사용할 수 있는 수식어로 아직 들어올 데이터의 형태에 대해 모를때 사용된다.

void main() {
  late final String name;
  name = 'AR';
  print(name);
}
728x90
반응형
LIST

'Dart' 카테고리의 다른 글

Dart Typedef - (5)  (0) 2023.09.02
Dart Functions - (4)  (0) 2023.09.02
Dart DataTypes - (3)  (2) 2023.08.28
Dart - 설치 및 환경설정(1)  (0) 2023.08.22
Dart 입문(0)  (0) 2023.08.21