🔵 1. Records (레코드) - 여러 값 한 번에 묶는 기능 추가됨
기존에는 여러 개의 값을 반환하려면 List, Map, class 같은 거 써야 했음.
이제 Records(레코드) 기능이 추가돼서 더 간편하게 가능해짐!
(String, int) getUser() {
return ('Alice', 25);
}
void main() {
var user = getUser();
print(user.$1); // Alice
print(user.$2); // 25
}
✅ 이름 지정 가능해짐
({String name, int age}) getUser() {
return (name: 'Alice', age: 25);
}
void main() {
var user = getUser();
print(user.name); // Alice
print(user.age); // 25
}
📌 요점
✔ 여러 값 한 번에 리턴 가능
✔ 이름 붙이면 $1, $2 안 쓰고 가독성 높아짐
🟢 2. Validation Switch (검증 가능한 스위치) 추가됨
기존 switch 문에서 조건 검증할 때 따로 if 써야 했는데,
이제 when 키워드를 추가하면 더 깔끔하게 가능해짐!
String checkType(dynamic value) {
return switch (value) {
int i when i > 0 => "양수",
int i when i < 0 => "음수",
String s => "문자열: $s",
_ => "알 수 없는 타입",
};
}
void main() {
print(checkType(10)); // 양수
print(checkType(-5)); // 음수
print(checkType("Hello")); // 문자열: Hello
print(checkType(0.5)); // 알 수 없는 타입
}
📌 요점
✔ when 키워드로 조건 추가 가능
✔ 패턴 매칭 활용 가능
🔴 3. sealed class - 서브클래스 강제됨 & 패턴 매칭 필수
- abstract + final 느낌
- switch 문에서 모든 경우를 체크해야 함
- 같은 파일 내에서만 상속 가능
sealed class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
void checkAnimal(Animal animal) {
switch (animal) {
case Dog():
print("🐶 강아지임!");
case Cat():
print("🐱 고양이임!");
}
}
void main() {
checkAnimal(Dog()); // 🐶 강아지임!
checkAnimal(Cat()); // 🐱 고양이임!
}
📌 요점
✔ switch에서 모든 경우 다 체크해야 함
✔ 같은 파일 내에서만 상속 가능
🟠 4. base class - 상속 가능하지만 implements 불가능
- extends(상속) 가능
- implements 불가능
- base, final, sealed 클래스만 상속 가능
base class Animal {
void makeSound() => print("소리 냄!");
}
base class Dog extends Animal {
void bark() => print("멍멍!");
}
class Cat implements Animal { // ❌ 오류 발생!
void makeSound() => print("야옹!");
}
void main() {
var dog = Dog();
dog.makeSound(); // 소리 냄!
dog.bark(); // 멍멍!
}
📌 요점
✔ extends는 되지만 implements 불가능
✔ base, final, sealed 클래스만 상속 가능
🟡 5. interface class - implements만 가능, extends 불가능
- implements(구현) 가능
- extends(상속) 불가능
interface class Animal {
void makeSound();
}
class Dog implements Animal {
void makeSound() => print("멍멍!");
}
class Cat implements Animal {
void makeSound() => print("야옹!");
}
void main() {
Dog dog = Dog();
Cat cat = Cat();
dog.makeSound(); // 멍멍!
cat.makeSound(); // 야옹!
}
📌 요점
✔ implements만 가능
✔ extends 불가능
🟣 6. mixin class - extends, switch 사용 불가능
- extends(상속) 불가능
- switch 사용 불가능
- on 키워드 사용 불가능
mixin class Animal {
void makeSound() => print("소리 냄!");
}
// ❌ `extends` 불가능!
// class Dog extends Animal {} // 오류 발생!
// ✅ `implements`만 가능
class Dog implements Animal {
void makeSound() => print("멍멍!");
}
void main() {
Dog dog = Dog();
dog.makeSound(); // 멍멍!
}
📌 요점
✔ implements만 가능
✔ extends, switch, on 불가능
정리
sealed class | ✅ | ❌ | 같은 파일 내에서만 상속 가능, switch에서 모든 경우 체크해야 함 |
base class | ✅ | ❌ | base, final, sealed 클래스만 상속 가능 |
interface class | ❌ | ✅ | 오직 implements만 가능 |
mixin class | ❌ | ✅ | extends, switch, on 불가능 |
반응형
'Flutter > Dart' 카테고리의 다른 글
🚀 dart 비동기 (async & await) (0) | 2025.03.28 |
---|---|
Dart의 Functional Programming 활용 (0) | 2025.03.27 |
Dart OOP (Object Oriented Programming) (0) | 2025.03.27 |
Dart 핵심 개념 한눈에 정리! (변수, 타입, Nullable, Enum, Loop 등) (1) | 2025.03.26 |
Dart 클래스 classes (2) (0) | 2025.02.03 |