Dart/Flutter

Flutter로 앱 만들기 - 8. Dart 클래스

wtc 2024. 6. 20. 20:59

Dart의 클래스

클래스 정의 및 인스턴스 생성

  // 클래스 정의
class Robot {
    String meterial;
    String name;
    int madeYear;
    
    // 생성자
    Robot(this.meterial, this.name, this.madeYear);
    
    //메서드
    void information() {
      print('이 로봇의 이름은 $name이고, $meterial로 이루어져 있으며, $madeYear에 만들어졌습니다.');
    }
}

void main(){
  var ironRobot = Robot('iron', 'ironRobot', 2024);
  
  ironRobot.information();
  
}

 

Robot이라는 Class를 만들었고, 이 Class는 생성할 때 meterial, name, madeYear을 받는다.

그리고 이 Robot의 메서드인 information을 실행시키면 information 메서드의 코드를 실행한다.

 

상속

부모 클래스에게 상속을 받으면  부모 클래스의 기능과 필요한 경우 속성과 메서드를 추가하거나 재정의 할 수 있다.

 

//클래스 정의
class Robot {
    String meterial;
    String name;
    int madeYear;
    
    // 생성자
    Robot(this.meterial, this.name, this.madeYear);
    
    void information() {
      print('이 로봇의 이름은 $name이고, $meterial로 이루어져 있으며, $madeYear년에 만들어졌습니다.');
    }
}

class DogRobot extends Robot {
  int size = 0;
  
  DogRobot(String meterial, String name, int madeYear, this.size) : super(meterial, name, madeYear);
  
  @override
  void information() {
    super.information();
    print('이 로봇의 사이즈는 $size입니다.');
  }
  
  void bark(){
    print('왈왈');
  }
  
}

void main(){
  
  //인스턴스 생성
  var bbebbe = DogRobot('Plastic','bbebbe',2024,50);
  
  bbebbe.information();
  bbebbe.bark();
  
  
}


새로운 키워드

 

extends : 상속을 받기 위한 키워드, A extends B는 A에게 B를 상속

super. : 부모 클래스에 있는 메서드, 속성, 변수를 호출

@override : 부모 클래스의 메서드를 재정의하겠다는 뜻

 

Getter와 Setter

Getter: 속성의 값을 읽을 때 사용하는 메서드

get 키워드를 사용하여 정의

 

Setter : 속성의 값을 설정 때 사용하는 메서드

set 키워드를 사용하여 정의

 

class information {
  String _name;
  String _gender;
  int _age;
  
  information(this._name, this._gender, this._age);
  
  //getter
  String get name => _name;
  
  //setter
  set name(String newName) { 
    if (newName.length > 3) {
      _name = newName;
    }
    else{
      print('이름이 너무 짧습니다.');
    }
  }
  
  String get gender => _gender;
  
  set gender(String newGender) {
    if(gender == 'male' && gender == 'female'){
      _gender = newGender;
    }
    else{
      print('올바른 성별을 선택해주세요');
    }
  }
  
  int get age => _age;
  
  set age(int newAge){
    if(newAge > 0){
      _age = newAge;
    }
    else{
      print('올바른 나이를 입력해주세요');
    }
  }
  void info(){
    print('이름 : $_name');
    print('성별 : $_gender');
    print('나이 : $_age');
  }
}
  
void main(){

    var kim = information('minsu','male',20);
    kim.info();
    
    kim.name = 'me'; // 이름이 짧습니다. 출력
}

 

결과: