flutter에서 사용하는 dart 언어의 제네릭 알아보기

오늘도 flutter에서 사용하는 dart언어를 알아보려 합니다.

이번 포스팅에서는 제네릭에 대해서 작성합니다.

제네릭

< >으로 타입을 지정할 수 있습니다.

abstract class StringTest{
  String getTest(String i);
  void setTest(String i);
}
abstract class Test<T>{
  T getTest(T i);
  void setTest(T i);
}

기본적으로 타입마다 지정해야 될 수 있었던 상황을 제네릭으로 코드의 중복을 막을 수 있습니다.

void main() {
  var list1 = <int>[1,2,3];
  var list2 = List<int>();
  var map1 = <int,int>{
    1 : 1,
    2 : 2,
    3 : 3
  };
  var map2 = Map<int,int>();
  print(list1.toString()+list2.toString()+map1.toString()+map2.toString());

리스트나 맵처럼 자료구조에서 제네릭을 사용하여 타입을 지정합니다.

리터럴 방식이나 생성자 방식 모두 같습니다.

class superClass{}
class sub1 <T extends superClass>{
  toString() => "$T";
}
  print(sub1<superClass>());

인자의 타입을 제네릭으로 제한할 수 있습니다.

  T functionTest<T>(List<T> i){
    T tmp = i[0];
    return tmp;
  }
  var f = functionTest<int>(list1);
  print(f);
}

제네릭 메소드를 사용하여 메소드와 함수에서 제네릭을 사용할 수 있습니다.

Written on January 1, 2019