[Dart] 4. Classes

2024. 12. 19. 13:37·Flutter
class Person {
    final String name = 'gwanson';
    int age = 26;

    void greeting() {
        print("Hi my name is $name");
    }
}

void main() {
    var person = Person();
    person.age = 27;
    person.greeting();
}
// 출력
// Hi my name is gwanson

Constructor method

constructor method는 class의 이름과 같아야 합니다.

class Person {
    final String name;
    int age;

    Person(this.name, this.age);

    void greeting() {
        print("Hi my name is $name");
    }
}

void main() {
    var person = Person('gwanson', 26);
    person.greeting();

    var person2 = Person('gwanhyeok', 27);
    person2.greeting();
}

// 출력
// Hi my name is gwanson
// Hi my name is gwanhyeok

Named Constructor Parameters

class에서의 named constructor parameter는 함수에서 적용했던 방법과 동일합니다.

class Person {
    final String name;
    int age;

    Person({required this.name, required this.age});

    void greeting() {
        print("Hi my name is $name");
    }
}

void main() {
    var person = Person(
        name: 'gwanson',
        age: 26,
    );
    person.greeting();
}

// 출력
// Hi my name is gwanson

Named Constructor

클래스에서 생성자를 여러 개를 만들고 싶으면 생성자.이름() 으로 생성하면 됩니다. 이렇게 생성한 생성자의 파라미터는 기본적으로 required입니다.

class Person {
    final String name;
    int age, score;
    String team;

    Person({
        required this.name,
        required this.age,
        required this.score,
        required this.team,
    });

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

    Person.createRedPlayer(
        String name,
        int age,
    ) : this.name = name,
        this.age = age,
        this.team = 'red',
        this.score = 0;

    void greeting() {
        print("Hi my name is $name, my team is $team");
    }
}

void main() {
    var bluePerson = Person.createBluePlayer(name: 'gwanson', age: 26);
    var redPerson = Person.createRedPlayer('gwanhyeok', 27);

    bluePerson.greeting();
    redPerson.greeting();
}

// 출력
// Hi my name is gwanson, my team is blue
// Hi my name is gwanhyeok, my team is red

Cascade Notation

생성된 클래스의 프로퍼티를 수정하는 방법은 다음과 같습니다.

var person = Person(name: 'gwanson', age: 26);
person.name = 'gwanhyeok';
person.age = 27;

하지만 Cascade Notation을 사용하면 코드를 더 간결하게 줄일 수 있습니다.

var person = Person(name: 'gwanson', age: 26):
    ..name = 'gwanhyeok'
    ..age = 27;

생성자 뒤에 : 을 붙이고 .. 프로퍼티를 적으면 수정이 가능합니다.

Enums

Enum이란 웹에서의 selectBox와 같은 역할을 합니다.
지정된 값들을 손쉽게 사용할 수 있게 해줍니다.

enum Tead { red, blue }

Abstract Classes

추상화 클래스란 직접적으로 구현된 클래스가 아닌, 클래스의 '틀'만 잡아놓는 것이라고 보면 됩니다.

abstract class Animal {
    void bark();
}

class Dog extends Animal {
    String name;

    Dog({required this.name});

    @override
    void bark() {
        print("bow wow");
    }
}

class Cat extends Animal {
    String name;

    Cat({required this.name});

    @override
    void bark() {
        print("meow");
    }
}

void main() {
    var dog = Dog(name: 'mungmung');
    dog.bark();

    var cat = Cat(name: 'goyang');
    cat.bark();
}

// 출력
// bow wow
// meow

위의 코드처럼 Dog 와 Cat 은 추상화 클래스 Animal 의 상속을 받고 있어, bark() 메소드가 필수로 존재해야합니다.

Inheritance

생성자가 존재하는 부모 클래스를 상속받은 자식 클래스는 super 를 이용하여 프로퍼티를 넘겨줄 수 있습니다.

class Animal {
    String name;

    Animal({required this.name});

    void sayName() {
        print("my name is $name");
    }
}

class Dog extends Animal {
    String color;

    Dog({required this.color, required String name}) : super(name: name);

    // Dog({required this.color, required super.name});

    @override
    void sayName() {
    super.sayName();
        print("color is $color");
    }
}

void main() {
    var blackDog = Dog(color: 'black', name: 'kkamdung');
    blackDog.sayName();
}

// 출력
// my name is kkamdung
// color is black

Mixins

Mixins는 생성자가 없는 클래스를 의미합니다. 클래스에 프로퍼티를 추가할 때 사용합니다.

with 키워드를 사용하면 상속의 의미보단 다른 클래스의 프로퍼티를 '공유'할 수 있습니다.

mixin class Weight {
    final double size = 68.2;
} 

mixin Height {
    final double height = 171.5;
}

class Human with Weight, Height {
    String name;

    Human({required this.name});

    void sayHello() {
        print("Hello, my name is $name. I'm $size and $height");
    }
}

void main() {
    var person = Human(name: 'gwanson');
    person.sayHello();
}

// 출력
// Hello, my name is gwanson. I'm 68.2 and 171.5

Mixin 클래스는 이전 Dart 버전에서는 일반적인 class로 선언 후 with를 사용할 수 있었지만, 최신 버전 Dart에서는 mixin class 를 사용해야 합니다.

'Flutter' 카테고리의 다른 글
  • [Dart] 3. Functions
  • [Dart] 2. Data Types
  • [Dart] 1. Variables
GwanSon
GwanSon
버그는 도전, 코드는 해결. 열정있는 개발을 하자.
  • GwanSon
    관슨의 개발일지
    GwanSon
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • iOS (3)
      • swift (15)
      • UIKit (0)
      • swiftUI (2)
      • 알고리즘 (8)
      • CS (8)
      • 면접 (11)
      • Flutter (4)
      • 회고 (2)
      • 잡담 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    후기
    2025 토스 Next
    ios
    백준
    tuist
    모듈화
    네이버 부스트캠프 후기
    네이버 부스트캠프
    토스
    boj
    Swift
    부스트캠프
    부스트캠프 10기
    챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
GwanSon
[Dart] 4. Classes
상단으로

티스토리툴바