-
Flutter 기본2(Class)Flutter 2022. 1. 27. 17:15
Class
생성자
아래와 같은 방법들이 있다. 개인적인 생각으로 Fruit2방법을 가장 많이 사용하지 않을까 싶다.
//기본 class Fruit { String? name; String? color; Fruit(String name, String color){ this.name = name; this.color = color; } } class Fruit2 { String? name; String? color; Fruit2(this.name, this.color); // Fruit(this.name, this.color){ // print('Constructor: $name($color)!'); // } } //초기화 리스트 class Fruit3 { String? name; String? color; Fruit3(String name, String color) : name = name, color= color; // Fruit(String name, String color) // : name = name, // color= color{ // print('Constructor: $name($color)!'); // } } // 이름있는 생성자 class Fruit4 { String? name; String? color; Fruit4.init(String name, String color){ this.name = name; this.color = color; } } // 리다이렉팅 생성자 class Fruit5 { String? name; String? color; Fruit5(this.name, this.color); Fruit5.init(String name) : this(name, 'Green'); } void main() { Fruit fruit = Fruit('Apple', 'Red'); Fruit2 fruit2 = Fruit2('Banana', 'Yellow'); Fruit3 fruit3 = Fruit3('BlueBerry', 'Blue'); Fruit4 fruit4 = Fruit4.init('Remon', 'Yellow'); // Fruit4 fruit4 = Fruit4('Apple', 'Red');//error Fruit5 fruit5 = Fruit5.init('melon'); // Fruit5 fruit5 = Fruit5('Apple','Red');//not error printFruitName(fruit); //Fruit is: Apple/Red! printFruitName(fruit2); //Fruit is: Banana/Yellow! printFruitName(fruit3); //Fruit is: BlueBerry/Blue! printFruitName(fruit4); //Fruit is: Remon/Yellow! printFruitName(fruit5); //Fruit is: melon/Green! } printFruitName(var object){ print('Fruit is: ${object.name}/${object.color}!'); }
Private
변수명 앞에 _를 추가함으로써, Private 변수를 생성, 다른 언어와 다르게 같은 파일 안에 있으면 Private에 접근 가능하다.
class Fruit { String? _name; Fruit(this._name); void printName() { print('Fruit is ${this._name}!'); } } void main() { Fruit fruit = new Fruit('Apple'); fruit.printName(); print(fruit._name);// It's possibe because of same file. }
Getter/Setter
Private변수에는 get/set을 설정 할 수 있음. 보통 '_'제외한 이름으로 만듬.
class Fruit { String? _name; Fruit(this._name); String get name { print("call get : $_name"); return _name ?? ''; } set name(String name) { print("call set : $name"); _name = name; } } void main() { Fruit fruit = Fruit('Apple'); fruit.name; // call get : Apple fruit.name = 'Banana'; // call set : Banana }
인터페이스
Interface라는 키워드 대신 class를 사용하여 인터페이스를 정의하고, implements로 사용합니다.
class Food { String? name; void printName() {} } class Fruit implements Food { @override String? name; Fruit(this.name); @override void printName() { print('Fruit is $name!'); } } void main() { Fruit fruit = Fruit('Apple'); fruit.printName(); }
Cascade Operator
클래스를 선언함과 동시에, 클래스에 함수들을 동시에 사용
class Fruit { String? name; String? color; Fruit(this.name, this.color); void printName() { print('My name is $name!'); } void printColor() { print('I am $color'); } } void main() { Fruit fruit = Fruit('Apple', 'Red'); fruit.printName(); //My name is Apple! fruit.printColor(); //I am Red Fruit('Apple', 'Red') ..printName() //My name is Apple! ..printColor(); //I am Red }
참조:
'Flutter' 카테고리의 다른 글
Flutter project 생성하기 (0) 2023.01.04 flutter version downgrade 방법 (0) 2022.08.22 VisualDensity.adaptivePlatformDensity 란 (0) 2022.05.24 Flutter Retrofit, JsonSerializable, build_runner(data layer, Clean Architecture, MVVM) (0) 2022.03.21 Flutter 기본1(변수,상수,연산자) (0) 2022.01.27