참고 강좌
- 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 |