본문 바로가기

프로그래밍 언어/Flutter

[Dart] 1. Dart 해보기

반응형
참고 강좌

 

 

Dart 시작하기 – 노마드 코더 Nomad Coders

Flutter 앱 개발을 위한 Dart 배우기

nomadcoders.co

 


 

  • dart 도 main이 가장 기본 method
void main() {
  print("Hello world");
}
  • ; 필수 (BUT 기본 format 이용해 자동으로 ; 추가해주지 않음 → 안쓸 때도 있기 때문)

 

변수

  • var 사용 - 타입을 구체화 할 필요 없음
void main() {
  var name = "KyungMi";
}
  • 값을 업데이트 할 때 변수의 본래 타입과 일치해야 함

 

 

→ String으로 선언하였으니 int 형으로 업데이트 불가능

 

  • 명시적으로 변수 타입 지정
void main() {
  String name = "KyungMi";
}

 

이들은 언제 사용되느냐

  • var: 함수나 메소드 내부에 지역변수를 선언할 때
  • 명시적변수 선언: class에서 변수나 프로퍼티를 선언할 때

 

Dynamic Type

: 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드 (정말 정말 필요할 경우에만 사용하기 )

 

type이 다이나믹일 경우 다음과 같이 여러 타임으로 변경 가능하다.

(var 변수 선언과 함께 초기화 했을 시, 명시적으로 변수 타입 지정했을 시와 다름)

void main() {
  var name;
	// dynamic name;
  name = "KyungMi";
  name = 12;
  name = true;
}

 

 

 

  • 필요한 이유
    • 변수가 어떤 타입인지 알기 어려운 경우 존재
    • 다이나믹으로 뭔가 작업하고 싶다면 변수 확인을 해줘야함

 

- 변수를 정확하게 모르므로 사용할 수 있는 메소드가 별로 없음

 

- 변수 확인이 된 후엔 다음과 같이 메소드가 많아짐

 

Null Safety

: 개발자가 null 값을 참조할 수 없도록 하는 것

bool isEmpty(String string) => string.length == 0;

main() {
  isEmpty(null);
}

 

 

 

 

1. null safety가 없는 dart 버전 : 런타임 에러 발생 (String 타입을 줘야하는데 null을 주니까)

→ 즉 컴파일 과정에서는 못잡아내고 컴파일 이후 실행하였을때 나는 에러로 알아낼 수 있다.
⇒ 이는 안좋음, 컴파일 전에 이를 잡아내면 좋음

런타임 에러
사용자가 앱을 사용하던 중 뜨는 에러

 

 

2. null safety가 생긴 dart 버전 : 컴파일 에러 발생 (아예 실행이 안됨) 

  • 어떤 변수가 null이 될 수 있음 다음과 같이 명확히 표시해야함

{Type}? 변수 ⇒변수는 {Type}도 가능하고, null도 가능하다는 것을 명시한 것

main() {
  String? name = "KyungMi";
  name = null; // -> 가능/ null 허용을 명시했기 때문
  
  int age = 5;
  //age = null; -> 에러/ null 허용을 명시하지 않았기 때문
}

 

 

- 맨 위 예시 코드를 실행할 수 있는 코드로 변환

bool isEmpty(String? string) => string.length == 0;
// → 이렇게 해야 일단 실행이 가능함 (String? string)
 
main() {
  isEmpty(null);
}

 

 

null이 될 수 있음을 명시한 변수일 경우

 

→ 아무것도 안하고 해당 타임 메소드를 사용할 때 error 발생 (해당 변수가 null일 수도 있다고)

 

 

다음 코드처럼 null 이 아님을 확인하고 메소드 사용 가능

main() {
  String? name = "KyungMi";
  name = null; 
  if(name != null) // 변수가 null이 아닌지 확인
    name.length;

	name?.length; // ?가 name이 null 인지 확인
}

 

Final

: 수정 불가능한 변수

main() {
  final name = "KyungMi"; 
}

 

late

: 초기 데이터 없이 변수를 선언 할 수 있음

main() {
  late final name;
  // do something, go to api
  name = "kyungMi";
}

 

→ late는 나중에 값을 넣는 것임으로 값을 넣기 전에는 접근하지 않아야 한다는 것을 알려줌 (컴파일 단계에서)

 

main() {
  late final name;
  // do something, go to api
  
  print(name); // error 발생 (name에 값이 없으니)
  name = "kyungMi";
  print(name); // 실행 가능 (name에 값이 들어갔으니)
}

 

Const

: compile-time constant를 만들어준다 (수정 불가능)

compile-time constant

 

컴파일 타임에 알고 있는 값이어야 함 → 앱을 올리기 전에 값을 먼저 알고 있다면 const

어떤 값인지 모르고, 그 값이 API로 부터 온다거나 사용자가 화면에 입력해야 하는 값이라면 final

반응형

'프로그래밍 언어 > Flutter' 카테고리의 다른 글

[Flutter] 1. flutter란?  (1) 2023.12.26
[Dart] 4. Class  (0) 2023.12.26
[Dart] 3. Function  (0) 2023.12.26
[Dart] 2. 데이터 타입  (0) 2023.12.26
[Dart] 0. Dart 기본 지식  (1) 2023.12.21