inblog logo
|
vosw1
    Dart

    컬렉션과 반복문과 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

    RSS·Powered by Inblog