A tour of the Dart language 페이지를 공부하면서 정리한 내용입니다.
Dart 에서는 배열은 List
타입으로 제공됩니다. 리스트 리터럴은 JavaScript 의 배열과 유사항 방식으로 생성합니다. 아래 코드에서 list
의 타입은 List<int>
타입으로 추론됩니다. List<int>
타입에 다른 타입을 추가하려고 시도하면 컴파잁 타임 또는 런타임 오류가 발생합니다. 보다 자세한 내용은 여기 를 참고해주세요.
Dart 컬렉션 리터럴의 마지막 항목 뒤에 쉼표(,
)를 추가할 수 있습니다. 후행 쉼표 (Trailing comma)는 컬렉션에 영향을 미치지 않지만, 복사-붙여넣기 시 오류를 방지할 수 있습니다. List
리터럴 앞에 const
키워드를 붙이면 컴파일 타임 상수로 선언할 수 있습니다.
Copy void main() {
// List<int> type
var list1 = [1, 2, 3];
list1.add(4);
// Error: The argument type 'String' can't be assigned to the parameter type 'int'.
// list1.add("String");
var list2 = [
'Car',
'Boat',
'Plane', // 리스트 요소 끝내 콤마를 추가할 수 있습니다.
];
var constantList = const [1, 2, 3];
// Error: Unsupported operation: indexed set
// constantList[1] = 1;
}
List
객체의 인덱스는 0
부터 시작하고 list.length - 1
은 마지막 인덱스입니다. length
속성을 이용해 리스트의 길이를 알 수 있으며, 인덱스를 이용해 리스트 값을 참조할 수 있습니다.
Copy void main() {
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
}
Dart 2.3부터 전개 연산자 (Spread operator, ...
)와 Null-aware 전개 연산자 (...?
)를 도입하여 여러 값을 컬렉션에 삽입하는 편리한 방법을 제공하기 시작했습니다. 보다 자세한 내용은 여기 를 참고해주세요.
Copy void main() {
// list2에 list의 각 항목을 추가합니다.
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
List<int>? list3 = nullableList();
// list3이 null이 아닌 경우에만 list3의 항목을 전개합니다.
var list4 = [0, ...?list3];
assert(list4.length == 1);
}
List<int>? nullableList() => null;
Dart 는 조건부와 반복을 사용하여 컬렉션을 생성할 수 있도록 해주는 collection if 와 collection for 를 제공합니다.
collection if : 조건식을 평가하여 true인 경우 표현식을 평가하여 컬렉션에 항목을 추가합니다.
collection for : 루프를 순회하며 표현식을 평하여 컬렉션에 항목을 추가합니다.
collection if와 for 에 대한 자세한 내용은 여기 를 참고해주세요. 제네릭 과 컬렉션 에 대한 자세한 내용은 링를 참고해주세요.
Copy void main() {
// promoActive가 true 일때 리스트에 'Outlet'을 추가합니다.
bool promoActive = true;
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
print(nav);
// listOfInts의 각 요소를 순회하면서 우측 표현식을 평가하여 리스트에 항목을 추가합니다.
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
print(listOfStrings);
}
<출력결과>
[Home, Furniture, Plants, Outlet]
[#0, #1, #2, #3]
List
타입은 다양한 속성과 메서드를 제공하고 있습니다.
Copy void main() {
var list = <String>["Gump", "Bob", "Edgar"];
print("List: $list");
print("타입: ${list.runtimeType}, 항목수: ${list.length}");
print("첫번째 아이템: ${list.first}, 마지막 아이템: ${list.last}");
print("빈 List 확인: ${list.isEmpty}, 아이템이 하나 이상 존재하는지 확인: ${list.isNotEmpty}");
list.add("Owen");
print("List: $list");
list.addAll(["Binary", "Johnny"]);
print("List: $list");
print("List 줄단위 출력:");
list.forEach(print);
list.sort();
print("List 정렬: $list");
print("List 역순: ${list.reversed}");
list.shuffle();
print("List 셔플: $list");
print("알파벳 B로 시작하는 이름 존재 확인: ${list.any((item) => item.startsWith("B"))}");
print("알파벳 B로 시작하는 이름 찾기: ${list.where((item) => item.startsWith("B"))}");
print("Bob 존재 확인: ${list.contains("Bob")}");
print("Bob 인덱스 확인: ${list.indexOf("Bob")}");
var dynamicList = <dynamic>[...list];
print("String List로 변환: ${dynamicList.cast<String>()}");
list.add("Gump");
print("Map으로 변환: ${list.asMap()}");
print("Set으로 변환: ${list.toSet()}");
list.remove("Gump");
print("List: $list");
list.removeAt(1);
print("List: $list");
list.removeRange(1, 3);
print("List: $list");
list.clear();
print("빈 List 확인: ${list.isEmpty}, 아이템이 하나 이상 존재하는지 확인: ${list.isNotEmpty}");
}