본문 바로가기
개발해보겡/Flutter

Dart Named Constructor 이해하기

by 취미야취미 2023. 1. 4.
728x90
반응형

Dart의 생성자는 다른 언어의 생성자와 유사합니다.

기본적인 생성자 방식을 알아보고 

Named Constructor에 대해서 알아보겠습니다.

Named Constructor에 대해 알아보기 전에 Named Parameter에 대해서 확인하세요.

[개발해보겡/Flutter] - Dart named parameter & positional parameter

class Human {
  final String name;
  int age;

  // Constructor
  Human(this.name, this.age);
  
  void intro() {
    print("My name is $name and I'm $age years old");
  }
  
}

void main() {
  var human = Human('name', 50);
  human.intro();
}

dart는 

클래스 내의 멤버 함수에서 멤버 변수를 사용할 때

this. 없이 변수명을 바로 사용해도 좋습니다.

다음은 Named Constructor를 이용한 클래스 생성입니다.

class Human {
  final String name;
  int age;
  String hair;

  // Constructor
  Human({
    required this.name,
    required this.age,
    required this.hair,
  });

  void intro() {
    print("My name is $name and I'm $age years old. My hair-color is $hair");
  }
}

void main() {
  var human1 = Human(
    name: 'name',
    age: 50,
    hair: 'gold'
  );
    var human2 = Human(
    name: 'nickname',
    age: 40,
    hair: 'black'
  );
  human1.intro();
  human2.intro();
}

추가적으로

hair-color에 따라 다른 생성자를 불러오도록 코드를 작성해보겠습니다.

class Human {
  final String name;
  int age;
  String hair;

  // Constructor
  Human({
    required this.name,
    required this.age,
    required this.hair,
  });

  Human.createHairGold({
    required this.name,
    required this.age,
  }) : hair = 'Gold';

  Human.createHairBlack({
    required this.name,
    required this.age,
  }) : hair = 'Black';

  void intro() {
    print("My name is $name and I'm $age years old. My hair-color is $hair");
  }
}

void main() {
  var human1 = Human.createHairBlack(
    name: 'name',
    age: 50,
  );
  var human2 = Human.createHairBlack(
    name: 'nickname',
    age: 40,
  );

  human1.intro();
  human2.intro();
}

위의 내용을 숙지하셨다면 

Named Constructor를 통해 Json 형식 데이터를 파싱해서 Class를 생성하는 코드를 살펴보겠습니다.


class Human {
  late final String name;
  late int age;
  late String hair;

  Human.fromJson({required Map<String, dynamic> humanJson})
      : name = humanJson['name'],
        age = humanJson['age'],
        hair = humanJson['hair'];

  void intro() {
    print("My name is $name and I'm $age years old. My hair-color is $hair");
  }
}

void main() {
  // List<Map<String, Object>>
  var apiData = [
    {
      "name": "name",
      "hair": "gold",
      "age": 60,
    },
    {
      "name": "nickname",
      "hair": "black",
      "age": 40,
    },
    {
      "name": "noname",
      "hair": "silver",
      "age": 30,
    },
  ];
  apiData.forEach((humanJson) {
    var human = Human.fromJson(humanJson : humanJson);
    human.intro();
  });
}

짜잔

감사합니다

반응형