Dart 기초 (Variables, DataType)
2023. 4. 21. 09:53ㆍFrontend/Dart&Flutter
Flutter 공식 문서 : https://docs.flutter.dev
Dart 사용하기 : https://dartpad.dev
- JIT(Just In Time) 컴파일 AOT(Ahead of Time) 컴파일
- JIT : Dart VM에서 개발 중일 때 사용
- AOT : 앱 배포시 사용. native ARM, x64 머신 코드로 변환
- null saftety를 통해 null 값을 참조하여 에러가 생기는 것 방지
- dart와 flutter 모두 구글이 만듦 → flutter 맞춤형 언어
시작하기 전
- 반드시 main method가 있어야함.
실제로 실행하는 것은 이 안에 넣어야함. - 세미콜론을 반드시 써야함 / 안 쓰는 경우도 있음
Variables
- 변수 선언시
- var 사용 : 대체로 권장됨
- String 등의 데이터 타입 사용 : class의 property를 작성할 때 권장됨
var name = "니꼬"; name = "alphabet"; // 변수는 업데이트할 수 있으나 같은 데이터 타입이어야함 String name2 = "nikko"; name2 = "alphabet"; // 대체로 var 사용이 권장됨 (컴파일러가 타입을 추론함) 메소드나 지역 변수 선언 시에는 var 사용이 나음 // type 사용시 : class 의 property를 작성할 때 사용 권장. - dynamic type : 필요할 때만 쓰는 것이 좋음
void main() {
var name;
dynamic name;
name = '니꼬';
name = 1234;
// 다이나믹 타입
if (name is String) {
name.// dynamic일 때는 쓸 수 있는 메서드가 많지 않지만
// dynamic이 아닌 타입을 지정할 경우 쓸 수 있는 메서드가 많음
}
if (name is int) {
name.// dynamic일 때는 쓸 수 있는 메서드가 많지 않지만
// dynamic이 아닌 타입을 지정할 경우 쓸 수 있는 메서드가 많음
}
}
- null safety : null을 참조할 수 없도록 함. 어떤 변수 혹은 데이터가 null이 될 수 있음을 명시함.
- 기본적으로 모든 변수는 null이 될 수 없음
- 물음표 넣을 경우 변수가 null 또는 타입이 될 수 있음을 앎.
void main() { String? nico = 'nico'; // nico would be string or null nico = null; nico?.isNotEmpty; // nico가 null이 아니라면 isNotEmpty 속성을 보여줌 if (nico != null) { nico.isNotEmpty; } } - final 변수는 수정할 수 없음. js의 const와 같음
void main() {
final name = 'nico';
name = 'las'; // 오류
final String name2 = 'nico';
name2 = '1'; // 오류
}
- late : 초기 데이터 없이 변수 선언 가능
void main() {
late final String name;
print(name); // 에러 -> null saftety. 변수를 넣어야 사용할 수 있음.
// do something, go to api or somthing
name = 'nico'; // 데이터를 나중에 넣어줌
name = '12'; // 에러
}
- const : dart의 final과 비슷. compile time constant를 만듦.
void main() {
const max_allowed_price = '12312324';
// 컴파일 할 때 알 고 있는 값을 사용 (앱스토어에 앱 올리기 전에 아는 값)
// api로 부터 오거나 사용자가 입력하는 값이라면 final이나 var가 되어야함
// 컴파일할 때 평가됨
max_allowd_price = '1234'; //에러
}
Data Types
- 기본 자료형
void main() {
// 모든 데이터 타입들이 class임
String name = 'nico';
bool alive = true;
int age = 12;
double money = 69.99;
// integer 와 double의 부모 자료형 num
num x = 12;
x = 1.1;
}
- List
void main() {
var numbers = [1, 2, 3, 4,];
List<int> numbers2 = [1, 2, 4, 5,];
numbers.first; // 첫번째 요소
numbers.last; // 마지막 요소
numbers.add(1); // 마지막에 1을 추가함 [1, 2, 3, 4, 1]
}
// 마지막에 ,를 추가할 경우 세로로 포매팅 (vscode)
- collection if
void main() {
var giveMeFive = true;
var numbers = [
1,
2,
3,
4,
// collection if
if (giveMeFive) 5,
];
// 다음 코드와 같음
if (giveMeFive) {
numbers.add(5);
}
}
- String Interpolation
void main() {
var name = 'nico';
var age = 10;
var greeting = 'Hello everyone, my name is $name and I\'m ${age + 2}!';
// 변수 담을 때는 $변수 계산할 때는 ${변수 + ...} 로 사용
print(greeting);
// Hello everyone, my name is nico and I'm 12!
}
- Collection For
void main() {
var oldFriends = ['nico', 'lynn'];
var newFriends = [
'lewis',
'ralph',
'darren',
for(var friend in oldFriends) "❤️ $friend",
];
print(newFriends) // [lewis, ralph, darren, ❤️ nico, ❤️ lynn]
}
- Maps
void main() {
var player = {
'name': 'nico',
'xp': 19.99,
'superpower': false,
};
// Type : Map<String, Object> --> 여기서 Object는 any와 같음
Map<int, bool> player2 = {
1: true,
2: false,
3: true,
};
Map<List<int>, bool> player2 = {
[1, 2, 4, 5]: true,
};
List<Map<String, Object>> players = [
{'name' : 'nico', 'xp': 19993.999},
{'name' : 'nico', 'xp': 19993.999},
]
}
- Sets : 중복되지 않는 요소의 자료형
void main() {
var numbers = {1, 2, 3, 4);
Set<int> numbers = {1, 2, 3, 4);
numbers.add(1);
numbers.add(1);
numbers.add(1);
numbers.add(1);
print(numbers); // {1, 2, 3, 4}
}'Frontend > Dart&Flutter' 카테고리의 다른 글
| Data Fetching과 패키지 설치 (0) | 2023.12.15 |
|---|---|
| 플러터와 Stateful Widget (2) | 2023.10.31 |
| 플러터 화면구성 (1) | 2023.10.31 |
| 플러터란? 프로젝트 시작하기 (1) | 2023.10.31 |
| Dart 기초 (Functions, Classes) (0) | 2023.08.15 |