class Car{
int seats; // 의자 수
String color; // 색상
Car(/*@required*/ int seats, [String color = 'black']){ // 생성자, []-> 옵션값, 없어도 가능
// 필수요소에 어노테이션 @required 사용가능
//Car({int seats, String color = 'black'}){ {}-> 옵션값, 순서를 바꿔도 됨
this.seats=seats;
this.color=color;
}
// 축약 함수
//Car(this.seats, this.color = 'black');
printVars(){
print('seat : $seats, color : $color');
}
}
void main(){
var newCar = Car(4); // new 연산자가 없어도 인스턴스 생성가능
//var newCar = Car(color:'red', seats:4); // 생성자가 중괄호로 감싸여있으면 순서바꾸기 가능
newCar.printVars();
}
클래스의 선언의 경우에는 자바와 다르게 생성자에 많은 옵션을 부여할 수 있다.
자바 생성자 처럼 Car(int seats, String color) 이런 식으로도 쓸 수 있고, Car(int seat, [String color]) 처럼 []로 옵션값을 주어서 입력을 안하면 기본값으로 설정되게 할 수 있다.
또는 Car({int seat, String color}) 처럼 {} 옵션을 주어 위치에 상관없이 파라미터이름:값 으로 인스턴스 생성시 인자를 전달하여도 된다.
또 플러터의 경우 @required 어노테이션을 사용하여 필수입력사항을 표시할 수 있다.
생성자를 축약함수로도 작성할 수 있다.
Car(this.seats, this.color);
인스턴스 생성부의 경우, new연산자를 사용하지 않아도 인스턴스 생성이 가능하다.
그리고 메소드 지역변수의 경우 var형으로 선언하는 것이 권장된다.