Dart - 5. Class 2

guddls ju·2023년 6월 12일
0

flutter 공부

목록 보기
4/5

Cascade Notation

  • 앞에 class가 있다면 .. 을 사용해서 property를 더 짧은 코드로 수정할 수 있다.
class Players {
	String name, team;
	int xp;

	Players(
    {required this.name,
     required this.xp,
     required this.team,
     });
	
	void sayHello() {
		print("Hi my name is $name");
	}
}

void main () {
	var player = Players(name: "minsu", xp: 2500, team: 'red');
  player.name = 'las';
  player.xp = 120000;
  player.team = 'blue';
  
  ==
    
  **var player = Players(name: "minsu", xp: 2500, team: 'red')
  ..name = 'las'
  ..xp = 120000
  ..team = 'blue'
	..sayHello();**
}

Enums

  • 개발자들이 실수하지 않게끔 도와준다 (선택의 폭을 좁혀주는 역할을 함)
  • enum type의 변수들은 해당 enum type에 생성된 값들 중에서만 값이 할당될 수 있다.
enum Team { red, blue }
enum XPLevel { low, middle, high }

class Players {
	String name;
	XPLevel xp;
  Team team;

	Players(
    {required this.name,
     required this.xp,
     required this.team,
     });
	
	void sayHello() {
		print("Hi my name is $name. xp = $xp. team = $team");
	}
}

void main () {
  var player = Players(name: "minsu", xp: XPLevel.low, team: Team.red)
  ..name = 'las'
  ..xp = XPLevel.high
  ..team = Team.blue
  ..sayHello();
}

Abstarct Classes

  • 다른 클래스들이 직접 구현해야하는 메소들을 모아놓은 일종의 청사진이다.
  • 다른 클래스들이 어떤 청사진을 가지고 있어야 하는지 정의해주기 때문에 유용하다.
  • 특정 메소드를 구현하도록 강제한다.
abstract class Person { // 추상 클래스
void walk(); // 메소드의 반환값만 설정
}
class Player extends Person { // 추상 클래스를 상속받음. walk라는 메소드를 구현해야 함
String name;
int xp;
String team;

Player({required this.name, required this.xp, required this.team});

void walk() { // 추상 메소드 재정의
print("Player is walking");
}

void sayHello() {
print("Hi my name is $name");
}
}

class Coach extends Person { // 추상 클래스를 상속받음
void walk() { // 추상 메소드 재정의
print("Coach is walking");
}
}

void main() {
var player = Player(name: 'coma', xp: 1700, team: 'blue');
var coach = Coach();
player.walk();
coach.walk();
}

Inheritance

  • super 라는 키워드를 통해 (확장한)부모 클래스와 상호작용할 수 있게 해준다.
class Human{
final String name;
Human({required this.name}); //required를 하게 된다면 18행 Player의 super에서 :name을 필요로 하게 된다.
// 만약 required가 없다면 18행에는 super(name);이 된다.
void sayHello(){
print("Hi my name is $name");
}
}

enum Team{red, blue}

class Player extends Human{
final Team team;

Player({
required this.team,
required String name,
**}): super(name:name);** //super를 통해 부모 클래스와 상호작용할 수 있게 해줌.


void sayHello(){
super.sayHello(); //Human의 print("Hy my name is $name");을 불러온다.
print('and I paly for ${team}');
}
}

void main(){
var player = Player(team: Team.red, name:'note',);
player.sayHello();
}

Mixins

  • 조건 : 생성자가 없는 클래스, mixin으로 생성
  • with를 사용해서 다른 클래스의 프로퍼티와 메소드를 긁어온다
  • 다른 클래스에 여러번 재사용이 가능하다
  • extend는 확장한 그 클래스는 부모 클래스가 되고, 자식 클래스는 부모 클래스를 super를 통해 접근할 수 있고,
  • Mixin의 with는 내부의 프로퍼티와 메소드를 가져오는 역할이다. (부모클래스가 되진 않는다)
profile
효율에 미친자

0개의 댓글