📘 var를 사용한 선언
변수는 var 변수명 = 값; 으로 선언합니다. 변수에 값이 들어가면 자동으로 타입을 추론하는 타입 추론 기능을 제공하므로 명시적으로 타입을 선언하지 않아도 됩니다.
void main (){
var name = '주녘주녘';
print(name);
// 변수의 값 변경가능
name = '주녘';
print(name);
// 변수명 중복은 불가
// var name = '플러터의신'; <- 오류남
}
📘 dynamic을 사용한 변수선언
var 타입은 변수의 값을 사용해서 변수의 타입을 유추하는 키워드입니다. 타입을 한 번 유추하면 추론된 타입이 고정됩니다.
따라서 고정된 변수 타입과 다른 변수 타입의 값을 같은 변수에 다시 저장하면 에러가 발생합니다. 하지만 dynamic 키워드를 사용하면 변수의 타입이 고정되지 않아서 다른 타입의 값을 저장할 수 있습니다.
void main() {
dynamic name = '주녘주녘';
name = 1;
}
📘 final/const를 사용한 변수 선언
final과 const는 변수의 값을 처음 선언 후 변경할 수 없습니다.
void main () {
final String name = '뉴진스';
name = '르세라핌'; // 에러발생 final로 선언한 변수는 선언 후 값을 변경 불가
const String name2 = '아이브';
name2 = '뉴진스'; // 에러발생 final로 선언한 변수는 선언 후 값을 변경 불가
}
- final은 런타임, const는 빌드타임 상수입니다.
- 코드를 실행하지 않은 상태에서 값이 확정되면 const를, 실행할 때 확정되면 final을 사용!
📘 컬렉션
여러 값을 하나의 변수에 저장할 수 있는 타입입니다.
여러 값을 순서대로 저장하거나(List), 특정 키값 기반으로 빠르게 값을 검색해야 하거나(Map), 중복된 데이터를 제거할 때(Set) 사용됩니다. 컬렉션 타입은 서로의 타입으로 자유롭게 형변환이 가능하다는 큰 장점이 있습니다.
🔷 List 타입
- 여러 값을 순서대로 한 변수에 저장할 때 사용
- 리스트의 구성 단위를 원소라고 합니다.
- 리스트명[인덱스] 형식으로 특정 원소에 접근 가능합니다.
- 인덱스는 원소의 순번
- 제일 첫 원소는 0으로 지정, 마지막 원소는 리스트 길이 -1 로 지정
void main() {
List<String> iveList = ['유진', '원영', '이서', '레이', '리즈', '가을'];
print('----------- 전체 리스트를 출력해보자 -----------');
print(iveList);
print('----------- 첫번째 원소를 출력해보자 -----------');
print(iveList[0]);
print('----------- 다섯번째 원소를 출력해보자 -----------');
print(iveList[4]);
print('----------- 리스트 길이를 출력해보자 -----------');
print(iveList.length);
print('----------- 인덱스 값 변경 -----------');
iveList[3] = '주녘';
print('----------- 전체 리스트를 출력해보자 -----------');
print(iveList);
}
출력값
----------- 전체 리스트를 출력해보자 -----------
[유진, 원영, 이서, 레이, 리즈, 가을]
----------- 첫번째 원소를 출력해보자 -----------
유진
----------- 다섯번째 원소를 출력해보자 -----------
리즈
----------- 리스트 길이를 출력해보자 -----------
6
----------- 인덱스 값 변경 -----------
----------- 전체 리스트를 출력해보자 -----------
[유진, 원영, 이서, 주녘, 리즈, 가을]
- 리스트 길이는 length를 가져와 확인할 수 있습니다.
📘 add() 함수
add() 함수는 List에 값을 추가할 때 사용되며 추가하고 싶은 값을 매개변수에 입력하면 됩니다.
void main() {
List<String> iveList = ['유진', '원영', '이서', '레이', '리즈', '가을'];
iveList.add('주녘'); // 리스트의 끝에 추가됨
print(iveList);
}
/Users/junhyuk/flutter/bin/cache/dart-sdk/bin/dart --enable-asserts /Users/junhyuk/Desktop/untitled/lib/main.dart
[유진, 원영, 이서, 레이, 리즈, 가을, 주녘]
Process finished with exit code 0
📘 where() 함수
where() 함수는 List에 있는 값들을 순서대로 순회하면서 특정 조건에 맞는 값만 필터링하는데 사용됩니다.
매개변수에 함수를 입력해야하며, 입력된 함수는 기존 값을 하나씩 매개변수로 입력받습니다. 각 값별로 true를 반환하면 값을 유지하고, false를 반환하면 값을 버립니다. 순회가 끝나면 유지된 값들을 기반으로 이터러블이 반환됩니다.
* 이터러블?
- List나 Set 등의 컬렉션 타입들이 상속받는 클래스
- List나 Set 같은 컬렉션이 공통으로 사용하는 기능을 정의해둔 클래스
- where() 이나 map() 등 순서가 있는 값을 반환할 때 사용
void main() {
List<String> iveList = ['유진', '원영', '이서', '레이', '리즈', '가을'];
final newList = iveList.where((name) => name == '유진' || name == '원영', ); // '유진' 또는 '원영' 만 유지
print(newList);
print(newList.toList()); // 이터러블을 리스트로 다시 반환할 때 toList 사용
}
/Users/junhyuk/flutter/bin/cache/dart-sdk/bin/dart --enable-asserts /Users/junhyuk/Desktop/untitled/lib/main.dart
(유진, 원영)
[유진, 원영]
Process finished with exit code 0
📘 map() 함수
map 함수는 List에 있는 값들을 순서대로 순회하면서 값을 변경할 수 있습니다.
매개변수에 함수를 입력해야 하며 입력된 함수는 기존 값을 하나씩 매개변수로 받습니다. 반환하는 값이 현재값을 대체하며 순회가 끝나면 이터러블이 반환됩니다.
void main() {
List<String> iveList = ['유진', '원영', '이서', '레이', '리즈', '가을'];
final newIveList = iveList.map((name) => '아이브 $name'); // 리스트의 모든 값 앞에 '아이브' 추가
print(newIveList);
print(newIveList.toList());
}
(아이브 유진, 아이브 원영, 아이브 이서, 아이브 레이, 아이브 리즈, 아이브 가을)
[아이브 유진, 아이브 원영, 아이브 이서, 아이브 레이, 아이브 리즈, 아이브 가을]
'Flutter' 카테고리의 다른 글
플러터 기본위젯 (0) | 2024.03.30 |
---|---|
typedef와 함수 (0) | 2024.03.30 |
TodoList App 만들기 (0) | 2024.03.21 |
Flutter MVVM 패턴 - 1 (0) | 2024.03.19 |
dart 비동기 프로그래밍 - 3 (0) | 2024.03.15 |