dart의 Class

훈나무·2023년 4월 8일
1

dart

목록 보기
4/8
post-thumbnail

Class의 기본 사용법

  1. dart에서는 this를 사용하지 않는다 (가능은 하지만 사용하지 않는걸 권고)
  2. new 키워드를 사용하지 않음
class Player {
  String name = '김밥';
  int xp = 1500;
  void hello() {
    print('Hi my name is $name'); // this.name 이 아닌 그냥 name으로 사용
  }
}

void main() {
  var player = Player(); // new 없이 초기화
  print(player.name);
  print(player.xp);
  player.hello();
}

constructors


positional params

먼저 이름이 없고 positional으로 생성하는 방법입니다.
첫번째 인자를 name으로 지정하고 두번째 인자를 xp로 지정해서 class를 생성합니다.

class Player {
  final String name;
  final int xp;
  Player(this.name, this.xp);

  void hello() {
    print('Hi my name is $name');
  }
}

void main() {
  var player = Player('싸피', 100);
  var player2 = Player('김밥', 100);
  player.hello();
}

named params

function 와 동일하게 중괄호로 감싸주면 끝입니다.
또한 required를 지정하거나, default값을 지정해 주어야합니다.

class Player {
  final String name;
  final int xp;
  Player({required this.name, this.xp = 77});

  void hello() {
    print('Hi my name is $name xp = $xp');
  }
}

void main() {
  var player = Player(name: '싸피', xp: 100);
  var player2 = Player(name: '김밥');
  player.hello(); //Hi my name is 싸피 xp = 100
  player2.hello(); //Hi my name is 김밥 xp = 77
}

Named Constructors


생성자를 하나가 아닌 다르게 여러개를 만들수 있습니다.
예를 들어, 다음과 같은 방식이 있습니다.

class Player {
  final String name, team;
  final int xp, age;

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

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

  void hello() {
    print('Hi my name is $name xp = $xp');
  }
}

void main() {
  var player = Player(name: '싸피', xp: 100, age: 1, team: 'red');
  var bluePlayer = Player.createBluePlayer(name: '싸피', age: 1); 
  // Player(name: '싸피', xp: 0, age: 1, team: 'blue') 과 같은 결과
}

example

Named Constructors방식을 사용한 API데이터를 가져와서 class를 생성하는 간단한 예시입니다.

class Player {
  final String name;
  int xp;
  String team;

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

  void sayHello() {
    print('안녕하세요 저는 $team팀의 $xp번 $name 입니다');
  }
}

void main() {
  var apiData = [
    {'name': 'dale', 'team': "red", 'xp': 0},
    {'name': 'davinchi', 'team': "blue", 'xp': 30},
    {'name': 'lambda', 'team': "red", 'xp': 10},
  ];
  List<Player> players = [];
  apiData.forEach((player) {
    var data = Player.fromJson(player);
    players.add(data);
  });

  players.forEach((p) {
    p.sayHello();
  });
}

profile
프론트엔드 개발자 입니다

0개의 댓글