[플러터] 5. Dart (2) Class, Cascade, Mixin

KangHo Lee's avatar
Dec 20, 2024
[플러터] 5. Dart (2) Class, Cascade, Mixin

1. 클래스

클래스 정의

class Person { String name; int money; Person(this.name, this.money); } void main() { Person p1 = Person("홍길동", 0); Person p2 = Person("임꺽정", 10000); print("${p1.name}의 재산은 ${p1.money}"); print("${p2.name}의 재산은 ${p2.money}"); }
💡
인스턴스 생성 시 쓰는 new를 생략 가능합니다.

선택적 매개변수 사용

class Person { String? name; int money; // 값이 들어오지 않을 때 기본 값을 정의할 수 있다. Person({this.name, this.money = 0}); } void main() { Person p1 = Person(name: "홍길동"); Person p2 = Person(money: 10000, name: "임꺽정"); print("${p1.name}의 재산은 ${p1.money}"); print("${p2.name}의 재산은 ${p2.money}"); }
  • Dart는 오버로딩이 없는 대신 선택적 매개변수 방식을 사용합니다.
    • 중괄호 {} 을 사용하여 정의합니다.
    • 첫 번째 인수가 name이고 두 번째 인수가 money였나? 라는 의문을 품을 필요가 없습니다.
    • 필요하지 않은 인수를 전달하지 않아도 되는 장점이 있습니다.
  • null이 들어올 수 있는 String(기본값 없음)은 String?로 적어야 합니다.
  • { }는 앞에 적을 수 없습니다.
    • Person(this.id, {this.name, this.money, this.nickname}); → 가능
    • Person({this.id, this.name, this.money}, this.nickname); → 불가

2. Cascade 연산자

class Person { int id; String name; late int money; // 나중에 들어옴 or 디폴트 0 String? nickname; // 있을수도 있고 없을 수도 있는 것 Person(this.id, this.name, this.money, this.nickname); Person.fromMap(Map<String, dynamic> m) : // 이름 있는 생성자 this.id = m["id"] == 0 ? 100 : 10, // 삼항 연산자 가능 this.name = m["name"], this.money = m["money"], this.nickname = m["nickname"] ?? "이름없음"; // null 대체 연산자 void init() { if (money == 0) { for(int i = 0; i < 10; i++) { money = money + 10; } } } } void main() { Person p = Person(1, "홍길동", 0, "이름없어"); // 일반 생성자 사용 // Map 선언 var m = { "id": 2, "name": "임꺽정", "money": 0, }; Person p2 = Person.fromMap(m); // 이름있는 생성자인지 static method인지 구분 필요 print(p2.id); print(p2.name); print(p2.money); print(p2.nickname); Person p3 = Person.fromMap(m)..init(); // 생성하면서 init 메서드를 실행, cascade print(p3.id); print(p3.name); print(p3.money); // 100이 됨 print(p3.nickname); }
  • Person.fromMap(Map<String, dynamic> m)
    • Map 타입을 받을 수 있는 이름이 있는 생성자입니다.
  • cascade 연산자 .. 는 객체에 여러 연산을 연속적으로 적용할 때 유용하게 사용되는 문법입니다.
// 콘솔 결과 p2.id: 10 p2.name: 임꺽정 p2.money: 0 p2.nickname: 이름없음 p3.id: 10 p3.name: 임꺽정 p3.money: 100 p3.nickname: 이름없음

3. Mixin class

mixin class Engine { int power = 1000; } mixin class Battery { int volt = 220; } class Car with Engine, Battery { } void main() { Car c = Car(); print("c.power ${c.power}"); print("c.volt ${c.volt}"); // 1000과 220을 출력 }
  • Mixin은 여러 클래스 계층에서 클래스의 코드를 재사용하는 방법입니다.
  • composition 없이 with로 다중 상속이 가능합니다.
 
Share article

devleekangho