[067] 플러터 (Flutter) 배우기 - Collection(콜렉션)과 Generic(제네릭)에 대한 이해

2023. 7. 8. 14:50모바일어플개발/Flutter

반응형

안녕하세요~ totally 개발자입니다.

 

Collection & Generic

 

이미 해당 부분은 그 동안 포스팅을 해오면서 자연스레 많이 사용하였습니다만 해당 부분에 대한 원리와 개념을 아는 것이 중요하다고 생각되어 포스팅을 쓰게 되었습니다. Collection(콜렉션)이란 데이터들을 모아둔 자료 구조를 말합니다. 플러터는 다트 언어를 사용하고 있으니 Map과 List가 Collection으로 쓰이게 됩니다. 제네릭을 설명하기 전에 제네릭의 유무 차이는 아래와 같습니다.

 

제네릭을 사용하지 않은 경우

List studentNameList = [];

 

제네릭을 사용한 경우

List<String> studentNameList = [];

 

위와 같이 제네릭을 사용하면 사용하고 있는 Collection에 Type(타입)을 지정하게 되어 해당 콜렉션이 어떤 타입들의 콜렉션인지를 제한하여 사용할 수 있습니다. 이 제네릭을 사용하게 되는 경우의 장점은 타입을 지정함으로서, 코드의 재사용성을 높이고, 타입이 잘못 전달되어 생길 수 있는 문제점을 사전에 방지하여 안정성을 보장할 수 있습니다. 하지만 무조건 제네릭 타입을 쓰면 무조건 같은 타입으로만 데이터를 보내야 하기 때문에 여러 타입을 다뤄야 하는 경우에는 특정 타입의 제네릭을 쓰지 않고 dynamic 타입을 사용하거나 제네릭을 사용하지 않는 것이 도움이 될 수 있습니다. 

 

아래 예제를 보시면 더욱 이해가 되실 것입니다.

2번째 줄에 List 다음 아무 타입을 명시하지 않은 경우 List<dynamic>과 같습니다. 그리하여 String 타입, int 타입, double 타입 등 어떤 타입을 넣어도 문제가 되지 않습니다.

 

4번째 줄에는 무조건 String 타입만 6번째 줄에는 반드시 integer(정수) 타입만 8번째 줄에는 Map를 활용하여 key값으로는 String, value값으로는 모든 타입 가능의 dynamic 타입을 지정해주었습니다. 8번째 Map<String, dynamic> 같은 경우에는 실제로도 많이 보셨을 것입니다. 이렇게 상황에 따라 무조건 타입을 지정하는 것이 아닌 dynamic으로 여러 타입을 받는 경우가 있으므로 무조건 타입을 지정해야 한다라고 보기에는 무리가 있습니다. 다른 프로그래밍 언어도 비슷하겠지만, 특히 이 다트, 플러터에서는 List와 Map에서의 제네릭 타입은 빼놓을 수 없는 부분이므로 반드시 잘 이해하고 넘어가셔야 합니다. 감사합니다.

 

References:

https://dart.academy/generics-in-dart-and-flutter/

반응형