AR삽질러

Dart Class2 - (7) 본문

Dart

Dart Class2 - (7)

아랑팡팡 2023. 9. 8. 18:25
728x90

 

Dart Class2

 

1. Enums

 - Dart의 열거형(Enum)은 고정된 상수 목록을 정의하는데 사용되는 데이터 형식이다.

 - Enum을 사용하게 되면 코드를 읽기 쉽고 실수를 없애며 이해하기 쉽게 만들 수 있다.

enum Hoby { board, ski }

class Intro {
  String name;
  int age;
  Hoby hobby;

  Intro({required this.name, required this.age, required this.hobby});

  void sayHello() {
    print("안녕하세요. 저는 $name이고 나이는 $age입니다. 그리고 취미는 $hobby입니다.");
  }
}

void main() {
  var ar = Intro(name: "아랑", age: 25, hobby: Hoby.board);
  ar.name = "랑랑";
  ar.age = 30;
  ar.hobby = Hoby.ski;
  ar.sayHello();
}

 - 하지만 Enum에는 한글을 사용할 수 없으니 주의해야한다.

 

enum Day { monday, tuesday, wednesday, thursday, friday, saturday, sunday }

class Today {
  Day day;

  Today({
    required this.day,
  });

  String getDayName() {
    switch (day) {
      case Day.monday:
        return "월요일";
      case Day.tuesday:
        return "화요일";
      case Day.wednesday:
        return "수요일";
      case Day.thursday:
        return "목요일";
      case Day.friday:
        return "금요일";
      case Day.saturday:
        return "토요일";
      case Day.sunday:
        return "일요일";
      default:
        return "알 수 없는 요일";
    }
  }

  void sayHello() {
    print("오늘은 ${getDayName()}입니다.");
  }
}

void main() {
  var today = Today(day: Day.monday);
  today.sayHello();
}

 

 

2. Abstract Classes

 - Dart의 추상화클래스(Abstract Classes)는 직접 인스턴스를 생성할수는 없고 다른 클래스들이 상송하여 사용할 수 있는 블루프린트(청사진)같은 역할을 한다.

 특징

 1) instance생성 불가 : 추상클래스는 직접 객체를 생성할 수 없다.(new키워드 사용 불가)

 2) 상속가능 : Abstract class는 다른 클래스들에게 상속될 수 있다.

enum Hobby { board, ski }

class Member {
  String name;
  int age;
  Hobby hobby;

  Member({
    required this.name,
    required this.age,
    required this.hobby,
  });

  String getMyHobby() {
    switch (hobby) {
      case Hobby.board:
        return "보드";
      case Hobby.ski:
        return "스키";
      default:
        return "등록되지 않은 취미";
    }
  }

  void sayHello() {
    print("안녕 나의 이름은 $name이야");
    print("나의 취미는 ${getMyHobby()} 입니다.");
  }
}

void main() {
  var ar = Member(name: "아랑", age: 23, hobby: Hobby.board);
  ar.sayHello();
}

 

3. Inheritance

 - Inheritance(상속)은 객체 지향 프로그래밍(OOP)의 개념으로 기존 클래스(부모, super)의 속성과 메서드를 새로운 클래스(자식, 서브)에서 재사용할 수 있게 한다.

 

class Human {
  final int phonnumber;
  Human({required this.phonnumber});
  void sayHello() {
    print("안녕하세요. 저의 번호는 $phonnumber 입니다.");
  }
}

enum Team { blud, red }

class Player extends Human {
  final Team team;

  Player({required this.team, required int phonnumber})
      : super(phonnumber: phonnumber);
}

void main() {
  var player = Player(team: Team.blud, phonnumber: 01011112222);
  player.sayHello();
}

 

 

@override사용

 

class Human {
  final int phonnumber;
  Human({required this.phonnumber});
  void sayHello() {
    print("안녕하세요. 저의 번호는 $phonnumber 입니다.");
  }
}

enum Team { blud, red }

class Player extends Human {
  final Team team;

  Player({
    required this.team,
    required int phonnumber,
  }) : super(phonnumber: phonnumber);

  @override
  void sayHello() {
    super.sayHello();
    print("그리고 저는 ${team} 입니다.");
  }
}

void main() {
  var player = Player(team: Team.blud, phonnumber: 01011112222);
  player.sayHello();
}

 

 Human클래스 :  phonnumber필드를 가지고 초기화할 수 있다.

 Player클래스 : Human클래스를 상속하고 team필드가 추가되었다.

 생성자 : Player클래스의 생성자에서 team. phonnumber를 필요로하기 때문에 super(phonnumber: phonnumber)에서  Human의 생성자를 호출하고 phonnumber를 전달하게된다.

 

@override사용

 - sayHello메서드 오버라이딩 : Player클래스에서 sayHello메서드를 다시 정의하여 부모 클래스인 Human클래스에서 상속받은 sayHello메서드를 호출하고 print를 출력한다.

 

 

4. Mixins

 - Dart에서 Mixins는 클래스에 기능을 추가하거나 코드를 재사용하기 위한 매커니즘으로 클래스의 계층 구조를 변경하지 않으면서 클래스에 새로운 기능을 주입할 수 있게 해주는 객체 지향 프로그래밍 패턴이다.

 - Mixins는 생성자가 없는 클래스로 상속시 extends를 하지 않고 with을 사용한다.

mixin Strong {
  final double strengthLevel = 1100.89;
}

mixin QuickRunner {
  void runQuick() {
    print("Runnnn!");
  }
}

class Human {
  final int phoneNumber;

  Human({required this.phoneNumber});

  void sayHello() {
    print("Hello, my phone number is $phoneNumber.");
  }
}

enum Team { blue, red }

class Player with Strong, QuickRunner {
  final Team team;

  Player({
    required this.team,
    required int phoneNumber,
  }) : super();

  void sayHello() {
    print("And I am on the $team team.");
  }
}

void main() {
  var player = Player(team: Team.blue, phoneNumber: 01011112222);
  player.sayHello();
  player.runQuick();
}

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST

'Dart' 카테고리의 다른 글

Dart 기초 - 변수와 타입 (1)  (0) 2024.04.24
Dart 기초 - Dart와 Flutter (0)  (0) 2024.04.24
Dart Class - (6)  (0) 2023.09.04
Dart Typedef - (5)  (0) 2023.09.02
Dart Functions - (4)  (0) 2023.09.02