ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Flutter: collection, generic
    공부 기록/Flutter 2021. 11. 23. 00:02
    728x90

    참고강좌: https://www.youtube.com/watch?v=6AUuEP_n38Y&list=PLQt_pzi-LLfpcRFhWMywTePfZ2aPapvyl&index=24 

    Flutter에서는 array를 List라고 함. 두가지가 있음
    - 하나는 fixed-length list(지정한 개수만 올 수 있음): var number = new List(5)  .. 길이가 5인 List
    - 또 다른 하나는 growble list(길이 제한 없음):var number = new List() .. 길이 제한 없음  

    List 안에 들어가는 것들응ㄴ 하나의 객체로 취급되어 다양한 타입이 들어갈 수 있음. int, double, boolean, function까지,

    즉 List number에서 <dynamic> 형의 데이터들을 가진 List 타입이다. 
    List<dynamic> number = new List()라고 쓸 수 있음
    -> 여기서 < >가 제네릭 타입을 의미. 제네릭이란? 콜렉션들의 데이터 타입을 원하는대로 지정하는 방법을 제공
    < > 안에 리스트에 들어갈 타입을 지정하면됨.  e.g. List<int>, List<String> -> 이렇게 지정하면 해당 데이터 타입을 가지지 않으면 에러 발생

    여기서도 Map이라는 collection의 데이터들을 generic 기법으로 타입을 지정한 것이다.

    Colum위젯의 경우도 children으로 데이터를 <Widget>으로 지정되어있기 때문에 배열 [ ] 안에  RiasedButton위젯과 같이 위젯만 올 수 있다.

    Colum 위젯을 ctr+click 눌러 소스코드를 확인하면, Column 위젯의 생성자 안에 children이라는 아규먼트가 있고,  children은 Widget 형의 generic 타입을 가지고 있다.  -> 즉, List안의 데이터들은 모두 Widget이어야 한다. 

    <Widget> 대신 <dynamic>으로 해도 되지만, <dyniamc>이나 var number를 사용하는 것이 항상 효율적이지는 않음. 다트는 type safety 언어로 타입을 판별할 수 있기 때문에, 앱 구동환경이 아닌 컴파일 시 변수와 변수의 타입이 일치하는지 확인함.  타입은 필수지만, 타입추론 기능으로 타입을 일일히 지정하지 않아도됨. 하지만 코드의 안정성을 위하여 타입을 지정하는 것을 추천함. 

    예를 들어, 이렇게 구현해도 되지만 가긊적 List<String>으로 작성하기!
    *addAll: [ ] 에 있는 모든 데이터를 List에 추가 

     

    https://www.youtube.com/watch?v=dSysQZrkTlo&list=PLQt_pzi-LLfpcRFhWMywTePfZ2aPapvyl&index=25 

    왜 제네릭스가 편한가? Circle 타입이 인자로 전달될 Slot을 생성했는데, squre가 전달되면 에러 발생. Slot<T> 로 지정하면 타입을 추후 지정할 수 있도록 함.  -> 제네릭스 사용한 것임.
    어떤 타입을 사용할 지 몰라 다 준비했으니, 필요한 타입을 골라 써라.

    댓글

Designed by Tistory.