728x90
반응형
Flutter 공부 이전에 그 언어인 Dart를 공부하며 기록한 포스트입니다.
Collection
List, dictionary, set 등 다양한 데이터 타입들이 Dart 언어에서는 어떻게 정의되고 이용되는지를 살펴보던 중, 처음 보는 기능이 눈에 들어왔습니다. 데이터 타입들 정의 내부에 if
와 for
syntax가 있는 것을 발견할 수 있었는데요. Dart에서는 collection이라 불리는 이 기능으로 list, dictionary, set 등을 정의할 때 조건문이나 반복문을 통해 코드의 능률을 올릴 수 있습니다.
Collection if
우선 조건문을 collection으로서 사용해 보겠습니다. 이 경우 조건문이 참인 경우 해당 원소를 데이터 타입에 추가하는 형식으로 되어 있습니다.
void main() {
var addMJ = true;
var my_list = [
'Kevin Durant',
'Lebron James',
'Kobe Bryant',
if (addMJ) 'Michael Jordan',
];
print(my_list);
// Console if addMJ is true: [Kevin Durant, Lebron James, Kobe Bryant, Michael Jordan]
// Console if addMJ is false: [Kevin Durant, Lebron James, Kobe Bryant]
}
만약 collection if를 사용하지 않으면 어떻게 구현할 수 있을까요? 아래 코드와 같이 Python 등 다른 언어들에서 사용하는 방식으로 구현할 수 있으나, 위 코드 대비 코드량이 증가함을 볼 수 있습니다. 썩 좋은 일은 아니죠.
void main() {
var addMJ = true;
var my_list = [
'Kevin Durant',
'Lebron James',
'Kobe Bryant',
];
if (addMJ == true) {
my_list.add('Michael Jordan');
}
print(my_list);
}
Collection for
Collection for은 반복문을 통해 데이터 타입을 초기화할 수 있게 해 줍니다. 변수 선언 후에 반복문을 통해 초기화를 수행할 수도 있지만, 훨씬 가독성이 뛰어납니다. 또한, 두 데이터 타입 간 원소 복사 등의 작업을 위해 필요한 반복문을 쉽게 표현 가능합니다.
void main() {
var legend = [
'Kobe Bryant',
'Michael Jordan',
'Magic Johnson',
];
var allstar = [
'Kevin Durant',
'Devin Booker',
'Lebron James',
'Steph Curry',
for(var player in legend) player,
];
print(allstar);
// Console: [Kevin Durant, Devin Booker, Lebron James, Steph Curry, Kobe Bryant, Michael Jordan, Magic Johnson]
}
만약 collection for을 쓰지 않을 경우 아래와 같이 코드가 복잡해집니다.
void main() {
var legend = [
'Kobe Bryant',
'Michael Jordan',
'Magic Johnson',
];
var allstar = [
'Kevin Durant',
'Devin Booker',
'Lebron James',
'Steph Curry',
];
for (var i = 0; i < legend.length; i++) {
allstar.add(legend[i]);
}
print(allstar);
}
728x90
반응형