본문 바로가기
flutter

[flutter] Collection과 Generic

by sssooon 2024. 1. 24.

String interpolation

interpolation을 직역하면 보간법이라고 한다.

문자열을 출력하거나 선언할때 중간중간 다른 변수를 끼워넣는것

당신의 점수는 $score이며, 당신의 레벨은 $level입니다.

 


Collection

데이터들을 모아서 가지고 있는 자료구조

 

list 

Collection 중에 하나의 자료구조 

 

 

fixed-length list

list내의 데이터의 갯수가 지정한 갯수만 가능.

 

growable list

갯수의 제한이 없음. List 생성자 안에 아무것도 안넣었기 때문에 갯수에 제한이 없음

void main() {
  var number = new List.empty(growable: true);
  //또는
  var number = [ ];
}

 

new List는 생성자를 통해서 새로운 인스턴스를 생성함. 그 인스턴스를 number라는 변수에 할당.

변수인 number가 List 객체에 참조를 저장.

 

var를 사용하면 해당변수 즉, number는 참조하고 있는 객체에 따라서 타입이 바뀐다. 위의 코드에서는 List이다.

Dart가 알아서 해당 변수가 참조하고 있는 객체를 통해 타입을 추론한다.

void main() {
  List number = new List.empty(growable: true);
  //또는
  List number = [ ];
}

 

 

 


Generic

Collection이 가지고 있는 데이터들의 데이터 타입을 지정해준다. 코드의 안정성과 재사용성을 가능하게 한다.

 

void main() {
  List<dynamic> number = [];
}

<>은 Generic임을 나타낸다.

 

List<dynamic>이란 이떤 변수가 여러 타입으로 지정될 수 있어야 할때 사용하는 것이다.

List 안에 어떠한 타입의 데이터들이 들어가야할지 지정하지 않았다.

이 경우 dynamic은 List안에 다양한 타입의 데이터들이 마음대로 들어올 수 있다.

 

 

각기 다른 타입의 데이터를 가지고 있는 List여도 출력된다.

 

 

Dart에서는 변수에 넣을수 있는 모든 것을 객체로 취급한다.

즉, List안에서 데이터로 나열될 수 있다. 함수나 boolean값도 객체로 취급하여 List에 넣을 수 있다.

 

 

 

 

Generic 타입을 int로 바꾸면 9,10,12 행이 오류가 뜬다.

11행은 함수의 리턴값이 정수이므로 오류가 뜨지 않는다.

 

 

 

 

 

 

 

 

Collection의 Generic 타입을 구체적으로 지정해줘야 하는 이유

void printNumber(List<int> a){
  print(a);
}

void main(){
  var number = [];
  //또는
  List<dynamic> number = [];
  
  number.add(5);
  printNumber(number);
}

printNumber의 함수는 List타입의 객체를 매개변수로 전달받아서 List를 출력해주는 함수이다.

List의 Generic type은 int다. 즉, List 안에 들어오는 데이터들은 int형이여야 한다.

 

printNumber 함수로 들어오는 매개변수가 int 타입이여하지만 main함수에서 만들어진 List 객체인 number는 dynamic 타입이기 때문에 오류가 난다.

 

 

 

void printNumber(List<int> a){
  print(a);
}

void main(){
  List<int> number = [];
  //또는
  List<int> number = List<int>.empty(growable: true);
  
  number.add(5);
  printNumber(number);
}

main함수에서 만들어진 List 객체의 Generic 타입을 int로 바꾸면 오류가 없어진다.

 

이러기에 var와 dynamic을 항상 쓰기에는 좋지 않다.

'flutter' 카테고리의 다른 글

[flutter] Null safety 널 세이프티  (0) 2024.01.23
[flutter] Navigator  (0) 2024.01.22
[flutter] Column Widget과 Row Widget  (0) 2024.01.22
[flutter] Container widget  (0) 2024.01.22
[flutter] toastMessage  (0) 2024.01.21