컬렉션과 반복문과 final

송민경's avatar
Apr 05, 2024
컬렉션과 반복문과 final

1. 컬렉션

List<int> nums = [1,2,3,4]; var nums2 = [1,2,3,4]; final List<int> nums3 = [1,2,3,4]; //한번 만들면 변경 불가능 -> 불변 유지/객체 복사만 가능 final nums4 = [1,2,3,4]; // final은 내부에 var을 포함하고 있기에 타입 생략 가능
 

2. 불변을 쓰는 이유 : 변경 감지

 
notion image
  • 값을 추가하고 싶을때 restAPI로 통신 요청
  • 4개를 json으로 받아서 그림
  • 다시 통신 요청해서 값이 그대로면 그릴게 없음
다시 요청해서 값이 변경되어있으면 (추가) 기존의 4개를 다지우고 다시 그려야함 / 비효율적
  • json으로 그림을 그리기전에 상태를 보관하고 있음 → 비교 가능함
컬렉션을 만들어서 컬렉션에 최초의 통신 결과를 들고 있음
그 결과를 기반으로 뿌림
  • 1도 문자열이니 클래스 타입이 보관되는 리스트 타입임
  • 다시 5개를 찾으면 json으로 받아서 리스트에 5가 추가가되고 변했다는 것을 알 수 있을까?
기존 값을 건드려서 이전값을 알 수 없기에 알 수 없음
그 값을 for문 돌려서 뿌림
  • final로 불변을 유지해서 기존의 데이터를 두고 추가로 불변을 유지하는 리스트를 생성
깊은 복사해서 하나 더 만들어서 이전 리스트와 현재 리스트를 비교
다른 부분만 다시 그릴 수 있음
⇒ 이전 값을 알아야 비교가 가능함 → 변경 감지
 

비교 로직

  • 직접 하려면 이중for문이 돌아서 각 번호 별로 같은 값이 있는지 찾아야 함
비교하는 로직이 복잡함
  • 같은 번지끼리 비교해서 같은지 확인하기
언제 다음으로 넘어갈지 알 수 없음
  • 길이만 비교해도 변경이 감지 됨
길이로 변경을 감지해보고 값 검증 하기
길이가 같아도 변경될 수 있기에 값 검증도 필요함
 

플러터가 해줌 : 상태 관리 엔진 / 리액트로 마찬가지

  • 데이터만 보고 그림을 그림
  • 수정
List<int> nums = [1, 2, 3, 4]; var nums2 = [1, 2, 3, 4]; final List<int> nums3 = [1, 2, 3, 4]; //한번 만들면 변경 불가능 -> 불변 유지/객체 복사만 가능 final nums4 = [1, 2, 3, 4]; // final은 내부에 var을 포함하고 있기에 타입 생략 가능 void main() { // for 문 : No Expression(기본 for문은 리턴이 안됨) // 순회 nums.forEach((n) => print(n)); // for 문 : Expression var k1 = nums.map((e) => e + 1); print(k1); }
notion image
List<int> nums = [1, 2, 3, 4]; var nums2 = [1, 2, 3, 4]; final List<int> nums3 = [1, 2, 3, 4]; //한번 만들면 변경 불가능 -> 불변 유지/객체 복사만 가능 final nums4 = [1, 2, 3, 4]; // final은 내부에 var을 포함하고 있기에 타입 생략 가능 void main() { // for 문 : No Expression(기본 for문은 리턴이 안됨) // 순회 nums.forEach((n) => print(n)); // for 문 : Expression var k1 = nums.map((e) => e); print(k1); var k2 = [...nums]; print(k2); }
notion image
List<int> nums = [1, 2, 3, 4]; var nums2 = [1, 2, 3, 4]; final List<int> nums3 = [1, 2, 3, 4]; //한번 만들면 변경 불가능 -> 불변 유지/객체 복사만 가능 final nums4 = [1, 2, 3, 4]; // final은 내부에 var을 포함하고 있기에 타입 생략 가능 void main() { // for 문 : No Expression(기본 for문은 리턴이 안됨) // 순회 nums.forEach((n) => print(n)); // for 문 : Expression var k1 = nums.map((e) => e * 2).toList(); print(k1); var k2 = [...nums]; print(k2); }
notion image
  • 삭제
List<int> nums = [1, 2, 3, 4]; var nums2 = [1, 2, 3, 4]; final List<int> nums3 = [1, 2, 3, 4]; //한번 만들면 변경 불가능 -> 불변 유지/객체 복사만 가능 final nums4 = [1, 2, 3, 4]; // final은 내부에 var을 포함하고 있기에 타입 생략 가능 void main() { // for 문 : No Expression(기본 for문은 리턴이 안됨) // 순회 nums.forEach((n) => print(n)); // for 문 : Expression var k1 = nums.map((e) => e * 2).toList(); print(k1); var k2 = [...nums]; print(k2); // 삭제 var k3 = nums.where((e) => e != 3).toList(); print(k3); }
notion image
notion image
List<int> nums = [1, 2, 3, 4]; var nums2 = [1, 2, 3, 4]; final List<int> nums3 = [1, 2, 3, 4]; //한번 만들면 변경 불가능 -> 불변 유지/객체 복사만 가능 final nums4 = [1, 2, 3, 4]; // final은 내부에 var을 포함하고 있기에 타입 생략 가능 void main() { // for 문 : No Expression(기본 for문은 리턴이 안됨) // 순회 nums.forEach((n) => print(n)); // for 문 : (Expression) 수정 : map으로 가공 var k1 = nums.map((e) => {if (e == 3) e * 3}).toList(); print(k1); var k2 = [...nums]; print(k2); // 삭제 var k3 = nums.where((e) => e != 3).toList(); print(k3); // 찾기 var k4 = nums.where((e) => e > 2).toList(); print(k4); var k5 = nums.where((e) => e == 2).toList(); print(k5); }
notion image
  • 찾기
notion image
  • 추가
List<int> nums = [1, 2, 3, 4]; var nums2 = [1, 2, 3, 4]; final List<int> nums3 = [1, 2, 3, 4]; //한번 만들면 변경 불가능 -> 불변 유지/객체 복사만 가능 final nums4 = [1, 2, 3, 4]; // final은 내부에 var을 포함하고 있기에 타입 생략 가능 void main() { // for 문 : No Expression(기본 for문은 리턴이 안됨) // 순회 nums.forEach((n) => print(n)); // for 문 : (Expression) 수정 : map으로 가공 var k1 = nums.map((e) => {if (e == 3) e * 3}).toList(); print(k1); var k2 = [...nums]; print(k2); // 삭제 var k3 = nums.where((e) => e != 3).toList(); print(k3); // 찾기 var k4 = nums.where((e) => e > 2).toList(); print(k4); var k5 = nums.where((e) => e == 2).toList(); print(k5); // 추가 var k6 = [...nums, 5]; print(k6); var k7 = [0, ...nums]; print(k7); }
notion image
  • 파싱할 필요가 없음
notion image
notion image
Share article

vosw1