Flutter/Dart 입문

[Dart] 16. 제네릭(Generic)

Couldi 2021. 11. 15. 12:01
반응형

21. 11. 15.

- Could -

 

이 글은 프로그래밍 입문을 Flutter 때문에 Dart로 시작하는 사람들을 위한 글입니다.
프로그래밍 언어가 가지고 있는 기본 컨셉 자체를 Dart라는 언어를 통해 설명하고,
많은 분들이 Flutter를 위해 학습한다고 생각해, 추후 Flutter 학습에 도움이 되는 방향으로 작성되었습니다.
1. 제네릭(Generic)
2. 제네릭의 사용이유
3. 어떻게 써야하는가?

 

1. 제네릭(Generic)

https://dart.dev/guides/language/language-tour#generics

 

A tour of the Dart language

A tour of all the major Dart language features.

dart.dev

난 제너릭을 좋아한다. 제네릭이라는 단어를 들어보지는 않았어도, List나 Map 형태의 데이터타입을 건드리면서 한번쯤은 봤던 녀석들이다.

List<String> fruits = ['apple', 'orange', 'melon'];

 

위의 리스트에서 <> 형태로 표현하는 부분. 저 부분을 우리는 제네릭이라고 한다.

조금 복잡한 자료구조나 클래스를 사용할때 안에 들어가는 데이터타입을 <>를 사용해 지정해주는 것이 바로 제네릭이다.

 

Dart를 공부하고 Flutter를 사용하다보면, 피할수 없이 언젠가는 마주해야한다. 하지만 딱히 배울 내용은 없다. 이걸 뭐라고 부르는지만 알면 되니까. 그리고 그냥 쓰던 대로 쓰면 된다.

 

 

2. 제네릭의 사용이유

컴퓨터가 알아서 각 데이터의 데이터타입 별로 관리를 해주면 좋을텐데, 굳이 제네릭을 사용하는 이유가 뭘까?

 

일단 성능적인 이유가 있다. 컴퓨터에 대해 조금 공부해본 사람은 아는 내용이겠지만, 데이터타입에 따라 컴퓨터가 할당하는 메모리 용량에는 차이가 있다. 무엇이 들어올지 모르는 형태로 코드를 작성하고, 컴퓨터가 거기에 대응해야하면 타입을 지정해줄때 보다 많은 메모리를 할당해야하고, 이는 프로그램의 퍼포먼스의 질을 하락시킨다. 라고 적긴 하지만, 요즘 컴퓨터의 능력은 고작 그 정도로 빌빌대지 않는 상황이다. 어지간히 프로젝트의 규모가 크지 않은 이상, 이런걸로 티나기 쉽지않다.

 

정작 중요한 이유는 클래스나 함수를 사용할 때, 보다 안정적인 구조의 프로그래밍을 가능하게 해주기 때문이다. 어떤 데이터가 들어가야하고 나가야하는지, 제네릭으로 명시해두면 코딩시에도 구조 파악이 용이하고, 프로그램 자체의 안정성이 올라간다. 데이터타입도 모르겠는 녀석들이 마구잡이로 들어와 프로그램을 헤집고 다니는 일이 없어지니까.

 

더 자세한 이유는 Doc을 참고해보기 바란다.

 

 3. 어떻게 써야하는가?

이 부분은 따로 신경쓸 필요가 없다. Dart와 Flutter는 이 부분이 아주 정리가 잘되어있으므로, IDE에서 작성하라는대로 형태를 맞추어 작성해주면 된다. 다만, dynamic이나 var 같은 어떤 형태나 올 수 있는 제네릭은 지양하는 것이 좋다. 어디에도 쓸수 있는 녀석이라고 아무데나 막써버리면, 제네릭이라는 것의 존재 이유가 없어진다. 특히 dynamic은 꼭 써야하는 곳에만 사용하자. dynamic 형이 오지 않으면 코딩이 불가한 경우가 있다. NoSQL형태의 데이터를 다뤄야하고, 들어오는 데이터가 정리가 제대로 안되어 dynamic말고는 해결책이 없는 그런 상황에서만 사용하는 것을 권한다.

 

잡설

코드를 짜다보면, 함축적인 단어와 표현 방식으로 컴퓨터와 대화하고, 협업하는 사람들과 대화를 해야한다. 그렇기 때문에 코드를 짤 때, 그냥 작동하는 코드가 아니라 이해하기 쉽고, 많은 부분을 예측할 수 있게 작성하는 방법을 선호한다. 같은 변수를 전달하더라도 변수의 이름으로 이게 어떤 데이터를 담는 상자인지, 어디에 쓰일건지가 예측이 되야한다고 생각하는 편이다.

사람이 말을 배우는 과정과 유사하다고 생각한다. 처음에는 아무 말이나 뱉어보면서 말을 익히고, 말하는 것이 자유로워 지면, 어떻게 해야하 내 생각을 더 잘 전달하고, 다른 사람들이 이해하기 쉬울까 생각해보는 순서와 같다. 주변에 말을 엉망으로 하는 사람들만 있으면, 내 말투도 그렇게 변해가듯, 코딩 스타일도 마찬가지라고 생각하기에, 다들 미래의 자신과 주변 사람들을 위해서라도, 어떤 코드가 예쁜지, 어떻게 코드를 짜야 좋을지 조그마한 고민을 달고 살았으면 좋겠다.

반응형