Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데이터 타입
- string
- javascript
- 안드로이드
- ViewPager
- classList
- querySelector
- serializable
- C++
- 함수 인자
- intent
- Flutter
- 프래그먼트
- 생명주기
- fragment
- DFS
- 부가데이터
- 230503
- putextra
- null-safety
- 인텐트
- 230510
- 230508
- parcelable
- ActionBar
- Adapter
- html
- textContent
- DOMContentLoaded
- Class
Archives
- Today
- Total
나만의 개발노트
[Dart] Class3 - abstract class / Inheritance / Mixins 본문
1. Abstract Class(추상화 클래스)
: 다른 클래스들이 직접 구현해야 하는 메소드들을 모아 놓은 blueprint(청사진 = 도면?)
- 추상화 클래스로는 객체를 생성할 수 없다
- extends 키워드로 다른 클래스에 상속하여 사용
- A클래스가 추상화클래스B를 상속 받았는데 B에 정의된 method를 A에 정의하지 않으면, 에러
- 추상화클래스B를 상속받은 A클래스 내에서 method를 변형할 수 있다.(반환형,이름만 동일하게)
//추상화 클래스 정의
abstract class Human {
void talk();
}
//extends 키워드로 Human 상속
class Player extends Human {
String name;
int xp;
Player({
required this.name,
required this.xp,
});
//Human에 정의된 talk()를 구현하지 않으면 컴파일 에러
void talk() {
print('talk method called in Player $name');
}
}
2. Inheritance(상속)
: 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것
- 자식 클래스 선언에 extends 키워드 사용
- 자식 클래스에서 부모클래스를 지칭하는 키워드 : super
- 자식 클래스에서는 부모클래스의 생성자(constructor)를 호출해야 한다
- 자식 클래스에서 부모클래스의 property, method를 사용할 수 있다
class Human {
final String name;
Human(this.name);
void sayHello() {
print("Hello my name is $name");
}
}
//Human클래스를 상속받는 Player클래스
//Human의 method, property사용 가능
//Human의 생성자 호출 필요
class Player extends Human {
final String team;
//부모 클래스는 super로 호출
//부모 클래스인 Human생성자에 name을 전달하는 과정
Player({
required this.team,
required String name,
}) : super(name);
}
void main() {
var player = Player(
team: 'red',
name: 'abc',
);
//상속받은 sayHello() 사용가능
player.sayHello();
}
2-1. override(대체)
: 부모클래스에게 상속받은 method의 body를 수정할 수 있다.
- @override 키워드 사용
class Human {
final String name;
Human(this.name);
//기본 sayHello
void sayHello() {
print("Hello my name is $name");
}
}
class Player extends Human {
final String team;
//부모 클래스는 super로 호출
//부모 클래스인 Human생성자에 name을 전달하는 과정
Player({
required this.team,
required String name,
}) : super(name);
//상속받은 Human의 sayHello()를 Player클래스에 맞게 수정
@override
void sayHello() {
super.sayHello();
print("I'm in $team team");
}
}
void main() {
var player = Player(
team: 'red',
name: 'abc',
);
player.sayHello();
//output : Hello my name is abc
// I'm in red team
}
3. Mixins
: 상속과 비슷하게 다른 클래스의 property, method를 사용할 수 있게 하는 것
- mixin 키워드 사용 (이전에는 class로도 가능했음)
- 생성자는 없음
Inheritance(상속) | mixin | |
공통점 | - property, method를 사용할 수 있다. - 다른 클래스에 재사용 가능하다. |
|
키워드 | extends | with |
여러개 | 다중상속X | 여러개 가능 |
생성자 | 있음 -> 자식 클래스에서 호출 필요 | 없음 |
//Mixin은 생성자가 없다
mixin Strong {
double power = 100.99;
}
mixin QuickRunner {
void runQuick() {
print("ruuuuuuun!");
}
}
class Parent {
String parent;
Parent(this.parent);
}
class Daddy {
String dad;
Daddy(this.dad);
}
//상속 키워드인 extends대신, with 키워드 사용
class Player with Strong, QuickRunner {
//Strong의 power사용 가능
}
//다른 클래스에도 재사용 가능
class Kid with QuickRunner {}
void main() {
//with로 연결된 QuickRunner의 메소드 runQuick() 사용 가능
var player = Player();
player.runQuick();
var kid = Kid();
kid.runQuick();
}