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형으로 선언하는 것이 권장된다.

omit_local_variable_types