제네릭(generics)은 Dart에서 사용되는 강력한 기능 중 하나이다. 제네릭은 코드의 재사용성과 타입 안정성을 높여준다.
제네릭은 함수나 클래스의 인수, 반환 값, 변수의 타입을 일반화(generalize)하는 방법을 제공한다. 일반적인 데이터 타입 대신에 타입 매개변수(type parameter)를 사용하여 여러 위치에서 동일한 코드를 재사용할 수 있다.
제네릭을 사용하면 데이터 타입에 대한 추상화를 가능하게 한다. 예를 들어, List 클래스를 생각해보면, 제네릭을 사용하지 않을 경우 다양한 데이터 타입을 담을 수 없다. 하지만 제네릭을 사용하면 다양한 타입의 리스트를 생성할 수 있다. 이렇게 제네릭을 사용하면 컴파일러가 타입 체크를 수행하므로 타입 안정성을 보장할 수 있다.
Dart에서 제네릭을 사용하려면 클래스나 함수를 정의할 때 타입 매개변수를 사용해야 한다. 타입 매개변수는 일반적으로 대문자로 표시되며, 함수나 클래스 내부에서 해당 타입을 사용할 수 있다.
예를 들어, 아래는 제네릭을 사용하여 List 클래스를 구현하는 예시이다
class List<T> {
List<T> items = [];
void add(T item) {
items.add(item);
}
T getItem(int index) {
return items[index];
}
}
void main() {
var stringList = List<String>();
stringList.add("Hello");
stringList.add("World");
print(stringList.getItem(0)); // 출력: Hello
var intList = List<int>();
intList.add(1);
intList.add(2);
print(intList.getItem(1)); // 출력: 2
}
위의 예시에서 List T는 타입 매개변수이다. 이렇게 하면 List 클래스를 생성할 때 어떤 타입의 리스트를 사용할 것인지 지정할 수 있다.
제네릭은 코드의 재사용성과 가독성을 향상시키고 타입 안정성을 보장하는 데 도움을 준다. 따라서 Dart에서는 제네릭을 적극적으로 활용하여 유연하고 안전한 코드를 작성할 수 있다.