constructors
class Dog {
final String name;
int age;
Dog({this.name, this.age});
void sayHello() {
print("Hello $name");
}
}
void main () {
var seolgi = Dog(
name: "seolgi",
age: 4,
);
}
- 클래스 내에서 변수를 선언할 때 타입을 꼭 명시해주어야한다.
- positional 파라미터는 기본적으로 required, named 파라미터는 required일 경우 명시해주어야한다.
- 파라미터를
required
로 설정 할 수 있다.
class명.컨스트럭터명
클래스명에 .
을 찍어서 constructor를 생성할 수 있다.
:
를 사용해 디폴트값(초기화)을 줄 수 있다.
class Dog {
... 생략...
Dog.isbaby({
required String name,
}) : this.name = name,
this.age = 0,
}
데이터 .fromJson()
Dog.fromJson(Map<String, dynamic> dogJson)
: name = dogJson['name'],
age = dogJson['age'];
apiData = [
{
"name": "seolgi",
"age": 4,
},
{
"name": "zero",
"age": 1,
},
];
apiData.forEach((dogJson) {
var dogs = Dog.fromJson(dogJson);
print(dogs);
});
cascade notation
- ..을 이용해 cascade notation 사용.
- 이때 함수 호출 부분에서 세미콜론을 붙이지 않아야한다.
- cascade의 마지막줄에서 세미콜론으로 마무리.
void main(){
var seolgi = Player(name: "seolgi", age: 4,)
..name = "zero"
..age = 1;
}
enum
- 타입을 지정해놓는다.
- 이때 enum의 타입에 신경쓰지 않아도 된다. string으로 할 필요 없음.
- 사용할땐
enum명.옵션
enum Color { pink, white }
class Button {
Color color;
Button({
required this.color,
})
}
void main () {
var MainBtn = Button(color: Color.pink)
}
abstract method : 추상화 클래스
- 말그대로 추상화를 한다.
- 클래스가 어떤 청사진을 가지고 있어야 하는지 정의.
- abstract 키워드를 클래스 앞에 적으면 됨.
- 사용할땐 필요한 곳에서 extends 한다.
- 추상화한 클래스가 반환하는 메서드를 갖고있어야함. 특정 메서드를 구현하도록 강제한다.
abstract class Dog {
void bark();
}
상속
: super(상속된 무언가)
를 통해 상속 대상과 소통할 수 있게 된다.
- super 생성자를 호출하는 것.
- required로 설정할 수도 있다.
- override도 가능 @override 키워드를 적고 그 아래 오버라이딩할 메서드를 작성.
- 이때 super로 생성자.메서드(); 해서 호출한다.
- 여기서 오버라이딩은 추가되는것이지 덮어쓰는 건 아니다.(?)
- print('hello')를 오버라이딩해서 print("i'm $name")하면 'hello i'm seolgi'가 출력(?)
mixin
- 클래스에 프로퍼티 추가할 때 사용한다. 재사용에 굿
- 생성자를 가지고있지 않다.
- with로 연결해 사용한다.
- class Dog with wait, sit, cute {}