오늘 공부한 내용
- list
- map
- operators (연산자)
- final, const
- if, switch
1. list
void main() {
// 리스트 생성
List walletList = [];
// 리스트에 값 추가
walletList.add('오백원');
walletList.add('천원');
walletList.add('만원');
print(walletList);
// [오백원, 천원, 만원]
// 리스트 인덱스를 이용한 리스트 원소 삭제
walletList.removeAt(1);
print(walletList);
// [오백원, 만원]
// 리스트 인덱스를 이용한 값 호출
print(walletList[0]);
// 오백원
print(walletList[1]);
// 만원
// 리스트 인덱스를 이용한 값 변경
walletList[1] = '오만원';
print(walletList);
// [오백원, 오만원]
}
void main(){
// 리스트 타입 지정
List<String> walletList = [];
walletList.add('백원');
print(walletList);
// [백원]
// 원소를 넣은 상태로 리스트 생성 (1)
List fruits = [
'Apple',
'Banana',
'Orange',
'Watermelon',
];
print(fruits);
// [Apple, Banana, Orange, Watermelon]
// 원소를 넣은 상태로 리스트 생성 (2)
List fruits2 = new List.from([
'Apple',
'Banana',
'Orange',
'Watermelon',
]);
print(fruits2);
// [Apple, Banana, Orange, Watermelon]
// 리스트 길이
print(fruits.length);
// 4
print(fruits2.length);
// 4
}
2. map
void main() {
// key - value
// : 을 기준으로 좌측 = key, 우측 = value
// Map 생성(1)
Map dict = {
'Apple' : '사과',
'Banana' : '바나나',
'Watermelon' : '수박',
};
print(dict);
// {Apple : 사과, Banana : 바나나, Watermelon : 수박}
print(dict['apple']);
// 사과
// Map 생성(2)
Map dict2 = {};
dict2.addAll({
'Apple' : '사과',
'Banana' : '바나나',
'Watermelon' : '수박',
});
print(dict2);
// {Apple : 사과, Banana : 바나나, Watermelon : 수박}
// 삭제
dict2.remove('Apple');
print(dict2);
// {Banana : 바나나, Watermelon : 수박}
// 변경
dict2['Banana'] = '라따뚜이';
print(dict2);
// {Banana : 라따뚜이, Watermelon : 수박}
print(dict2['banana']);
// 라따뚜이
// key 값만 리스트로 출력
print(dict2.keys.tolist());
// [Banana, Watermelon]
// value 값만 리스트로 출력
print(dict2.values.tolist());
// [라따뚜이, 수박]
}
void main() {
// key와 value의 type 지정 가능
Map<String, int> price = {
'Apple' : 2000,
'Banana' : 3000,
'Watermelon' : 5000,
};
print(price);
// {Apple : 2000, Banana : 3000, Watermelon : 5000}
}
map type은 파이썬의 dictionary와 비슷한 자료형이네요.
한 가지 주의할 점은,
key 값은 중복하여 사용할 수 없다는 특징이 있습니다. 만약 map에 추가할 때 실수로 이미 있는 key을 이용하면 한 개 더 생기는 것이 아닌 기존에 있던 key의 value 값을 바꿔줍니다. 쉽게 말하면 덮어쓰기가 됩니다.
3. operators
void main(){
int numA = 2;
// 1을 더하는 것
numA ++;
print(numA);
// 3
// 1을 빼는 것
numA --;
print(numA);
// 2
// null 설정 및 null 이면 어떤 값을 넣어라
int? numB;
print(numB);
// null
numB ??= 10;
print(numB);
// 10
// +=, -=, *=, /=
double numC = 2;
numD += 1;
print(numD); // 3
numD -= 1;
print(numD); // 2
numD *= 2;
print(numD); // 4
numD /= 2;
print(numD); // 2
}
다른 언어들과 비슷한 모습이네요. 파이썬이나 C를 공부하셨다면 아마 쉽게 이해가 되는 부분들입니다.
새로운 게 있다면 int? num B; 와 numB ??= 10; 이 부분이 될 것 같네요.
int? numB; 는 numB라는 변수에 null 값을 넣어라는 뜻입니다.
numB ??= 10; 은 numB의 값이 null이라면 10을 넣어주라는 뜻입니다.
그리고 조금 어려울 수 있는 개념을 뽑으면 += 가 될 것 같아요.
numD += 1; 은 풀어쓰면 다음과 같습니다.
numD = numD + 1;
numD에 원래 있던 값에 1을 더해주고 이를 다시 numD에 저장하라는 뜻입니다.
-=, *=, /= 도 같은 원리로 적용하면 됩니다.
다음으로 비교 연산자들이 있습니다.
어렵지 않으므로 코드는 생략하겠습니다.
모두 true 또는 false 값인 bool type으로 나옵니다.
1. <, >, <=, >=
2. ==, !=
3. &&, ||
4. 변수이름 is Type
4. final, const
void main() {
// final
final String nameA = '라따뚜이';
// const
const String nameB = '미키마우스';
}
final과 const는 모두 값이 변하지 않게 해주는, 즉, 상수로 만든다는 뜻이다.
기능은 똑같지만 둘은 작동방식에서 차이가 있다.
final
- 런타임 시점에 할당된다.
const
- 컴파일 시점에 할당된다.
런타임 : 컴퓨터가 프로그램을 실행하는 것.
컴파일 : Dart 언어를 컴퓨터가 알아들을 수 있는 기계어로 변환하는 것.
5. if, switch
void main(){
// if
int numA = 21;
if(numA % 4 == 0){
print('4의 배수 입니다.');
}else if(numA % 4 == 1){
print('나머지가 1입니다.');
}else if(numA % 4 == 2){
print('나머지가 2입니다.');
}else{
print('어떤 조건에도 맞지 않습니다.');
}
// switch
switch(numA % 4){
case 0:
print('4의 배수입니다.');
break;
case 1:
print('나머지가 1입니다.');
break;
case 2:
print('나머지가 2입니다.');
break;
default:
print('어떤 조건에도 맞지 안습니다.');
break;
}
}
swich에서 각 조건에 break를 넣어주지 않으면 조건에 부합하더라도 다음 케이스로 넘어갑니다.
'Programming > Flutter&Dart' 카테고리의 다른 글
Dart 기초 문법 (4) (0) | 2022.08.08 |
---|---|
Dart 기초 문법 (3) (0) | 2022.08.04 |
Dart 기초 문법 정리 (1) (0) | 2022.08.03 |