void main() {
Lecture<String> lecture1 = Lecture('123', 'lecture1');
lecture1.printIdType();
Lecture<int> lecture2 = Lecture(123, 'lecture2');
lecture2.printIdType();
}
class Lecture<T> {
final T id;
final String name;
Lecture(this.id, this.name);
void printIdType() {
print(id.runtimeType);
}
}
제네릭(Generic)은 Dart와 같은 프로그래밍 언어에서 타입의 안정성을 제공하고 코드의 재사용성을 높이기 위해 사용되는 기능입니다. 제네릭을 사용하면 클래스, 함수, 메서드 등을 정의할 때 특정 타입이 아닌 타입 매개변수를 사용하여 다양한 타입에 대해 작동하는 범용 코드를 작성할 수 있습니다.
위의 코드에서 Lecture
라는 클래스는 제네릭을 사용하여 정의되었습니다. Lecture
클래스는 T
라는 타입 매개변수를 가지며, 이 매개변수는 id
속성의 타입을 결정합니다. name
속성의 타입은 항상 String
입니다.
main
함수에서 두 개의 Lecture
인스턴스를 생성하고 있습니다:
lecture1
: String
타입의 id
를 가지는 Lecture
인스턴스
Lecture<String>('123', 'lecture1')
id
는 String
타입, name
은 'lecture1'
이 됩니다.printIdType
메서드를 호출하면 String
이 출력됩니다.lecture2
: int
타입의 id
를 가지는 Lecture
인스턴스
Lecture<int>(123, 'lecture2')
id
는 int
타입, name
은 'lecture2'
이 됩니다.printIdType
메서드를 호출하면 int
가 출력됩니다.printIdType
메서드는 id
의 런타임 타입을 출력하는 메서드입니다. runtimeType
프로퍼티를 사용하여 객체의 타입을 런타임에 확인할 수 있습니다.
이렇게 제네릭을 사용하면 Lecture
클래스를 다양한 타입의 id
를 가지는 여러 상황에서 재사용할 수 있으며, 동시에 컴파일 시간에 타입 안정성을 보장받을 수 있습니다. 이는 코드의 오류를 줄이고 유지보수성을 향상시키는 데 도움이 됩니다.