[Dart] 생성자

misonaru·2024년 7월 25일

Dart

목록 보기
11/13

생성자

- Dart에서 생성자 코드를 단축할 수 있음.

1. 기존방법

  • late를 명시하여 값을 추후에 받아옴을 명시
  • 자바에서 하듯이 생성자 작성
class Player {
  late final String name;
  late int xp;

  // 생성자
  Player(String name, int xp) {
  	this.name = name;
    this.xp = xp;
  }
.
.
.

2. 새롭게 학습한 방법

  • late는 사용하지 않음
  • this.변수명 사용
class Player {
  final String name;
  int xp;

  Player(this.name, this.xp);	// 생성자

  void sayHello() {
    print('안녕하세요 저는 $name에요');
  }
}

named coustructor parameter

- named parameter처럼 하면 된다= {} 추가

  • null값 언급 때문에 required를 붙일 것
class Player {
  final String name;
  int xp;

  Player({required this.name, required this.xp});	// 생성자

  void sayHello() {
    print('안녕하세요 저는 $name에요');
  }
}

void main() {
  var player = Player(
  	name : '나루',
    xp : 10000
  );
  player.sayHello();
}

Named Constructors

  • 사용자에게 이 정보들만 받고 나머지는 지정한 값을 넣겠다 싶을 . 때사용
  • 클래스명.namedConstructor() :
  • :을 사용하여 필수 파라미터 입력 후, 원하는 값들을 지정
class Player {
  final String name;
  int xp, age;
  String team;

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

  Player.createYoki({required String name, required int age})
      : this.name = name,
        this.age = age,
        this.xp = 0,
        this.team = 'Yoki';

  Player.createShiba(String name, int age)
      : this.name = name,
        this.age = age,
        this.xp = 100,
        this.team = 'Shiba';

  void sayHello() {
    print('안녕하세요 저는 $name에요');
  }
}

void main() {
  var player = Player(
    name: '나루',
    xp: 10000,
    age: 8,
    team: 'family',
  );

  // named constructor
  var playerYoki = Player.createYoki(
    name: '나루',
    age: 8,
  );

  // positional constructor
  var playerShiba = Player.createShiba(
    '미소',
    6,
  );

  player.sayHello();

  print('playerYoki Info');
  print(playerYoki.name);
  print(playerYoki.xp);
  print(playerYoki.age);
  print(playerYoki.team);

  print('playerShiba Info');
  print(playerShiba.name);
  print(playerShiba.xp);
  print(playerShiba.age);
  print(playerShiba.team);
}

복습

  • api로부터 여러 player가 들어있는 목록을 받는다는 가정.
	class Player {
  final String name;
  int xp;
  String team;

  Player.fromJson(Map<String, dynamic> playerJson)
      : this.name = playerJson['name'],
        this.xp = playerJson['xp'],
        this.team = playerJson['team'];

  void sayHello() {
    print('안녕하세요 저는 $name에요');
  }
}

void main() {
  var apiData = [
    {
      'name': '나루',
      'team': 'Yoki',
      'xp': 0,
    },
    {
      'name': '미소',
      'team': 'Shiba',
      'xp': 0,
    },
    {
      'name': '하루',
      'team': 'DachsHund',
      'xp': 0,
    }
  ];

  apiData.forEach((playerJson) {
    var player = Player.fromJson(playerJson);
    player.sayHello();
  });
}
profile
미소와 나루 집사

0개의 댓글