Flutter/Dart 문법

[Dart] Generic

Chafle 2023. 3. 22. 16:12
반응형

 

Generic은 타입을 외부에서 받을 때 사용한다.

 

class Lecture {
  final int id;
    final String name;
  
  Lecture(this.id, this name);
  
}

이런 Class가 있다고 보면,

 

Lecture은 class외부에서 생성자를 input으로 받게 되는데

타입은 사실 받기 어렵다. 이미 class내부에서 정의내렸기 때문이다.

 


void main() {
 Lecture<String> lecture1 = Lecture('123','lecture1'); // String이니까 잘 들어간다
}

class Lecture<T> { // <>사이에 무엇을 넣어도 상관없는데 보통T넣는다.
  final T id;
    final String name;
  
  Lecture(this.id, this.name);
  
}

class 외부에서 타입을 지정하고 싶으니까 <T>을 붙여줬고

인스턴스에도 타입을 T로 바꿔 놓으면

 

Lecture<Type>에 따라서 input에 Type에 맞는 값을 위 코드처럼 적당하게 넣어 줄 수있다.

 

 

 

 

runtimeType으로 타입을 확인해보면

내가 설정한 타입으로 잘 설정된지 확인 할 수 있다.

 

void main() {
 Lecture<String> lecture1 = Lecture('123','lecture1');
  lecture1.printIdType();
  
  Lecture<int> lecture2 = Lecture(123, 'lecture2');
  lecture2.printIdType();
}

class Lecture<T> { // <>사이에 무엇을 넣어도 상관없는데 보통T넣는다.
  final T id;
    final String name;
  
  Lecture(this.id, this.name);
 
  void printIdType() {
    print(id.runtimeType);
  }
  
}

 

 

 


 

 

타입 여러개를 받고 싶은 경우

void main() {
 Lecture<String, String> lecture1 = Lecture('123','lecture1');
  lecture1.printIdType();
  
  Lecture<int, String> lecture2 = Lecture(123, 'lecture2');
  lecture2.printIdType();
}

class Lecture<T,X> { // <>사이에 무엇을 넣어도 상관없는데 보통T넣는다.
  final T id;
    final X name;
  
  Lecture(this.id, this.name);
 
  void printIdType() {
    print(id.runtimeType);
  }
  
}

 

이렇게도 generic이 가능하다

반응형

'Flutter > Dart 문법' 카테고리의 다른 글

[Dart] map(List mapping, Map mapping, Set Mapping)  (0) 2023.03.23
[Dart] 이어진 숫자 분리해서 List/map 적용하기  (0) 2023.03.23
[Dart] 인터페이스(abstract)  (0) 2023.03.22
[Dart] Static  (0) 2023.03.22
[Dart] 오버라이딩  (0) 2023.03.22