반응형

이번 스터디에서는 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 = 0
  // element = 0
  // vTotal = 0
  // return = 0 + 0 = 0
  
  // index = 1
  // element = 1
  // vTotal = 0
  // return = 0 + 1 = 1
  
  // index = 2
  // element = 2
  // vTotal = 1
  // return = 1 + 2 = 3
  
  // index = 3
  // element = 3
  // vTotal = 3
  // return 3 + 3 = 6

index는 List값의 자리번호이며, 첫번째 파라미터 0번부터 element자리에 List값을 할당하며 반복된다.

그리고 vTotal 파라미터 자리엔 이전에 리턴받은 결과값이 누적되는 방식이다.


3. Reduce/Fold - "reduce", fold

사용방식은 fold와 큰 차이를 보이지 않는다.

fold에서는 시작값인 0을 지정하는데, reduce에서는 생략된다.

  int total2 = numbers.reduce((vTotal, element){
    //print(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);
(이 국가명은 한국입니다., 이 국가명은 중국입니다., 이 국가명은 일본입니다., 이 국가명은 러시아입니다., 이 국가명은 미국입니다.)

어떤 방식이든 코딩하는데 정답은 없다.

상황에 따라서 유연하게 대응하며 만들어 나가면 되는것이다.

스터디 끝.

반응형

+ Recent posts