[Dart] Constructor(생성자)

AI·2023년 11월 5일

생성자는 클래스의 이름과 같아야함.

class Player{
	late final String name;
    late int xp;
    
    Player(String name, int xp){
    	this.name = name;
        this.xp = xp;
    }
    
    void sayHello(){
    	var name = '1';
    	print("Hi my name is ${this.name}");
    }
}

void main(){
	var player = Player('dart',100);
    player.sayHello();
    var player2 = Player('alal',1200);
}

생성자 코드 줄이기

class Player{
	final String name;
    int xp;
    
    Player(this.name, this.xp);
    
    void sayHello(){
    	print("Hi my name is $name");
    }
}

void main(){
	var player = Player('dart',100);
    player.sayHello();
    var player2 = Player('alal',1200);
    player2.sayHello();
}

< Named Constructor Parameters >

class Player{
	final String name;
    int xp;
    String team;
    int age;
    
    Player(this.name, this.xp, this.team, this.age);
    
    void sayHello(){
    	print("Hi my name is $name");
    }
}

void main(){
	var player = Player('dart',100,'red',12);
    player.sayHello();
    var player2 = Player('alal',1200,'blue',9);
    player2.sayHello();
}

너무 많은 positional argument가 있으면 어떤 값을 표시하는지 알기 어려움.

class Player{
	final String name;
    int xp;
    String team;
    int age;
    
    Player({this.name, this.xp, this.team, this.age});
    
    void sayHello(){
    	print("Hi my name is $name");
    }
}

void main(){
	var player = Player(
      name : 'dart',
      xp:100,
      team:'red',
      age:12,
    );
    player.sayHello();
    var player2 = Player(
    	name:'alal',
        xp:1200,
        team:'blue',
        age:9,
        );
    player2.sayHello();
}

하지만 이것도 문제가 생길 수 있다. null일수도 있기때문
해결법 : 각 argument 앞에 required 키워드 붙이기

class Player{
	final String name;
    int xp;
    String team;
    int age;
    
    Player({
    	required this.name, 
        required this.xp, 
        required this.team, 
        required this.age,
        });
    
    void sayHello(){
    	print("Hi my name is $name");
    }
}

void main(){
	var player = Player(
      name : 'dart',
      xp:100,
      team:'red',
      age:12,
    );
    player.sayHello();
    var player2 = Player(
    	name:'alal',
        xp:1200,
        team:'blue',
        age:9,
        );
    player2.sayHello();
}

< Named Constructors >

class Player{
	final String name;
    int xp, age;
    String team;
    
    Player({
    	required this.name, 
        required this.xp, 
        required this.team, 
        required this.age,
        });
    
        
    Player.createBluePlayer({
    	required String name, 
        required int age,
    }) : this.age=age,
    	 this.name = name,
    	 this.team = 'blue',
    	 this.xp =0;
         
    Player.createRedPlayer(String name, int age) :
    	this.age=age,
    	this.name = name,
    	this.team = 'red',
    	this.xp =0;
        
    void sayHello(){
    	print("Hi my name is $name");
    }
}

void main(){
	var player = Player.createBluePlayer(
      name : 'dart',
      age:12,
    );
    player.sayHello();
    var redPlayer = Player.createRedPlayer('alal', 9);
    player2.sayHello();
}

: => 클래스 초기화


class Player{
	final String name;
  int xp;
  String team;
    
  Player.fromJson(Map<String, dynamic> playerJson) :
    name = playerJson['name'],
    xp = playerJson['xp'],
    team = playerJson['team'];
   
  void sayHello(){
    print("Hi my name is $name");
  }
}

void main() {
  var apiData = [
    {
      "name": "dart",
      "team":"red",
      "xp":0,
    },
    {
      "name": "java",
      "team":"red",
      "xp":0,
    },
    {
      "name": "c",
      "team":"red",
      "xp":0,
    },
  ];
  apiData.forEach((playerJson){
    var player = Player.fromJson(playerJson);
    player.sayHello;
  });
}

0개의 댓글