이번 스터디에서는 List심화단계를 다뤄보려 한다.
바로 소스로 확인해 보자.
1. Looping 활용
List<String> world = [
'한국' ,
'중국' ,
'일본' ,
'러시아' ,
'미국'
];
world.forEach((value){
print (value);
});
한국
중국
일본
러시아
미국
위 소스는 List의 forEach용법이다.
파라미터 자리인 value에 world의 값을 넣어주고, 이 value자리의 파라미터 값을 기능수행 영역에서 사용할 수 있다.
이번에는 forEach와 같은 기능을 수행하는 다른방법을 알아보자.
List<String> world = [
'한국' ,
'중국' ,
'일본' ,
'러시아' ,
'미국'
];
for (String value in world){
print (value);
}
한국
중국
일본
러시아
미국
해당 방식 또한 forEach와 같은 결과를 추출한다.
world의 value값을 String 변수에 넣어, 기능수행 영역에서 사용할 수 있다.
※여기서 말하는 기능수행 영역은 중괄호 안쪽 영역.
2. Mapping - map활용
List<String> world = [
'한국' ,
'중국' ,
'일본' ,
'러시아' ,
'미국'
];
final newList = world.map ((value){
return '이 국가명은 ${value}입니다' ;
});
(이 국가명은 한국입니다, 이 국가명은 중국입니다, 이 국가명은 일본입니다, 이 국가명은 러시아입니다, 이 국가명은 미국입니다)
map의 경우, 기능수행영역 안의 리턴값을 받을 수 있다.
기능수행영역 안에서 출력(return)할때마다 계속해서 누적 후, newList변수에 신규 할당하기 때문에,
변경된것 처럼 보인다. 하지만, 클래스world의 원값은 변함이 없다.
※ 추가로, 만약 List형태로 바꾸고 싶다면 newList.toList();로 처리할 수 있다.
print (world);
[한국, 중국, 일본, 러시아, 미국]
3. Reduce/Fold - reduce, "fold"
List<int > numbers = [
0 ,
1 ,
2 ,
3 ,
4 ,
5 ,
];
위 numbers의 값들을 합산해보자.
int total = numbers.fold (0 ,(vTotal,element){
return vTotal+element;
});
print (total);
첫번째 시작할 값, vTotal은 이전에 리턴해 준 값이다. -> (중괄호(기능수행영역)안에서 반복하면서)
결과값은 15가 추출된다.
15
헷갈릴수 있으니, 중괄호 안에서 수행될때의 값을 보자면 아래와 같이 진행된다고 보면 된다.
index는 List값의 자리번호이며, 첫번째 파라미터 0번부터 element자리에 List값을 할당하며 반복된다.
그리고 vTotal 파라미터 자리엔 이전에 리턴받은 결과값이 누적되는 방식이다.
3. Reduce/Fold - "reduce" , fold
사용방식은 fold와 큰 차이를 보이지 않는다.
fold에서는 시작값인 0을 지정하는데, reduce에서는 생략된다.
int total2 = numbers.reduce ((vTotal, element){
return vTotal + element;
});
print (total3);
15
※여기서 팁
위에 소스를 dart에서는 아래와 같이 간소화가 가능하다.
int total3 = numbers.reduce ((total, element) => total + element);
print (total3);
15
위 소스에서 보이는 "=>" 이것은 arrow함수라고 한다.
중괄호안에 다양한 기능(계산 등)을 구현하는 것이 아닌, 한줄로 처리하는 간단한 기능이라면
위와 같이 하는 방법도 있다.
맨 위에서 다뤘던, world클래스 가지고도 해본다면 아래와 같이 구현할 수 있다.
final newList2 = world.map ((value)=> '이 국가명은 $value입니다.' );
print (newList2);
(이 국가명은 한국입니다., 이 국가명은 중국입니다., 이 국가명은 일본입니다., 이 국가명은 러시아입니다., 이 국가명은 미국입니다.)
어떤 방식이든 코딩하는데 정답은 없다.
상황에 따라서 유연하게 대응하며 만들어 나가면 되는것이다.
스터디 끝.