Dart 제너릭(Generics) 심화 학습 방법입니다. Dart 제너릭(Generics) 개념 설명 → 실습 예제 2개 → 해설 & 출력 예시 순서대로 공부 할수 있도록 작성하였습니다. 실습하면서 자연스럽게 제너릭 개념을 이해하고 활용할 수 있으시길 바랍니다.
Dart 제너릭(Generics) 심화 학습 |
🧩 Dart 제너릭(Generics) 심화 학습
여러 타입을 다룰 수 있는 유연하고 재사용 가능한 코드 작성 방법
✅ 1. 제너릭 타입 이해하기 ( List<T>, Map<K, V> )
📘 개념 설명
-
**제너릭(Generic)**은 타입을 코드에서 나중에 결정할 수 있도록 하는 문법입니다.
-
List<T>에서 T는 **어떤 자료형이든 될 수 있는 “타입 변수”**예요.
-
코드 재사용성과 타입 안정성을 높여줍니다.
🏆 실습 예제 1: 제너릭 List 사용하기
void main() {
List<int> numbers = [1, 2, 3];
List<String> fruits = ['사과', '바나나'];
print(numbers);
print(fruits);
}
✅ 출력:
[1, 2, 3]
[사과, 바나나]
타입이 명확하므로 실수로 다른 타입을 넣으면 에러 발생!
🏆 실습 예제 2: Map<K, V>로 학생 점수 저장
void main() {
Map<String, int> scores = {
'지훈': 95,
'민지': 88,
};
print('지훈 점수: ${scores['지훈']}');
}
✅ 출력:
지훈 점수: 95
✅ 2. 제너릭 클래스 & 함수 만들기
📘 개념 설명
-
제너릭은 직접 만든 클래스나 함수에도 사용할 수 있어요!
-
다양한 타입을 받아서 하나의 구조로 재사용할 수 있게 도와줍니다.
🏆 실습 예제 1: 제너릭 클래스 만들기
class Box<T> {
T item;
Box(this.item);
void show() {
print('박스 안에: $item');
}
}
void main() {
Box<String> box1 = Box('사탕');
Box<int> box2 = Box(100);
box1.show(); // 박스 안에: 사탕
box2.show(); // 박스 안에: 100
}
✅ 출력:
박스 안에: 사탕
박스 안에: 100
🏆 실습 예제 2: 제너릭 함수 만들기
T repeat<T>(T value, int times) {
print('값을 $times번 반복합니다:');
for (int i = 0; i < times; i++) {
print(value);
}
return value;
}
void main() {
repeat<String>('안녕', 2);
repeat<int>(123, 3);
}
✅ 출력:
값을 2번 반복합니다:
안녕
안녕
값을 3번 반복합니다:
123
123
123
✅ 3. 제너릭 타입 제한 ( extends )
📘 개념 설명
-
T extends SomeType을 사용하면 T는 반드시 특정 타입의 자식이어야 한다는 제한을 줄 수 있어요.
-
예: 숫자만 비교하거나, 공통 속성이 있는 객체만 허용할 때 유용합니다.
🏆 실습 예제 1: 숫자 타입만 허용하는 제너릭 클래스
class MathBox<T extends num> {
T x;
T y;
MathBox(this.x, this.y);
T add() => (x + y) as T;
}
void main() {
MathBox<int> box = MathBox(10, 20);
print('합: ${box.add()}');
}
✅ 출력:
합: 30
🏆 실습 예제 2: 특정 클래스를 상속한 타입만 받기
abstract class Animal {
void speak();
}
class Dog extends Animal {
void speak() => print('멍멍!');
}
class Cat extends Animal {
void speak() => print('야옹!');
}
class PetCage<T extends Animal> {
T pet;
PetCage(this.pet);
void callPet() {
pet.speak();
}
}
void main() {
PetCage<Dog> cage = PetCage(Dog());
cage.callPet(); // 멍멍!
}
✅ 출력:
멍멍!
🎓 마무리 요약
개념 |
설명 |
---|---|
List<T>, Map<K,V> |
다양한 타입을 받을 수 있는 컬렉션 구조 |
제너릭 클래스 |
어떤 타입이든 받아서 재사용할 수 있는 클래스 |
제너릭 함수 |
입력 타입에 따라 유연하게 동작하는 함수 |
T extends Type |
특정 타입만 허용하도록 제한하는 문법 |
💡 실전 활용 예시
-
Flutter에서 ListView<T>, Dropdown<T> 등 많은 위젯이 제너릭 기반
-
API 응답을 여러 타입으로 파싱할 때 제너릭 클래스 사용
-
Dart 유틸리티 함수의 범용성 향상
댓글 쓰기