5. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
1) ํด๋์ค
- ํด๋์ค: ์ธ์คํฐ์คํํ๊ธฐ ์ํ ์ค๊ณ๋ ์ญํ (์ธ์คํด์คํ: ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ๋ ๊ฒ)
- ํ๋กํผํฐ: ํด๋์ค ์์์ ์์ฑ์ ํํ
- ๋ฉ์๋: ํด๋์ค ์์ ์์ฑํ๋ ํจ์(ํด๋์ค์ ํ๋กํผํฐ๋ฅผ ์กฐ์ํ๋ ๋ฑ์ ์ฉ๋๋ก ์ฌ์ฉ), .์ฐ์ฐ์ ๋ถ์ฌ ์ ๊ทผ ๊ฐ๋ฅ
- ์ธ์คํด์ค: ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋ ๊ฐ์ฒด
2) ์ ๊ทผ ์ง์ ์
- ๋ณ์๋ช ์์ _๊ธฐํธ๋ฅผ ๋ถ์ด์ง ์์ผ๋ฉด ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅ, ๋ถ์ด๋ฉด ์ ๊ทผ ๋ถ๊ฐ๋ฅ
- ํ๋ผ์ด๋น ๋ณ์(_๊ธฐํธ ๋ถ): ํด๋น ํด๋์ค๊ฐ ์ ์๋์ด ์์ง ์๋ ๋ค๋ฅธ ํ์ผ์์ ์ง์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
- ๋ฉ์๋์๋ ๋์ผํ๊ฒ ์ ์ฉ
// person.dart
class Person{
int _age;
}
// main.dart
import "person.dart";
...
var person = Person();
person._age = 10; // error! ์ ๊ทผ ๋ถ๊ฐ
3) ์์ฑ์
- ์์ฑ์: ์ธ์คํด์คํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ์ผ์ข ์ ๋ฉ์๋
- ๊ธฐ๋ณธ ์์ฑ์: ํด๋์ค๋ช ๊ณผ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋
- ์ฌ์ฉ์ ์ ์ ์์ฑ์: ๊ธฐ๋ณธ ์์ฑ์(ex. Person()) ์ฌ์ฉํ ์ ์์ง๋ง, ์ ํ ๋งค๊ฐ ๋ณ์ ์ฌ์ฉํ๋ฉด Person()๋ ํธ์ถํ ์ ์์(ํ์ง๋ง ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถํ ๊ฒ X, ๋ชจ๋ ๋งค๊ฐ๋ณ์์ null ๋์ ํ ์์ฑ์ ํธ์ถ)
class Person {
int _age;
Person({this._age}); // ์์ฑ์
}
...
var person = Person();
var person2 = Person(_age : 20);
4) getter, setter: ํด๋์ค ์ธ๋ถ์์ ํ๋ผ์ด๋น ๋ณ์(_๋ณ์)์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ
- getter: ํ๋กํผํฐ ๊ฐ์ ธ์ค๊ธฐ
- setter: ํ๋กํผํฐ ์ค์ ํ๊ธฐ
class Rectangle() {
num left, right, top, height;
}
Rectangle(this.left, this.right, this.top, this.height);
num get right => left + width; // right ๊ฒํฐ
set right(num value) => left = value - width; // right ์ธํฐ
5) ์์
class Hero {
String name = '์์ ';
void run() {}
}
class SuperHero extends Hero { // Hero ์์, SuperHero๋ Hero์ ํฌํจ
// ๋ถ๋ชจ์ run() ๋ฉ์๋๋ฅผ ๋ค์ ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)
@override
void run() {
super.run(); // ๋ถ๋ชจ์ run()์ ์คํ, super: ์ํผํด๋์ค ์ ๊ทผ
this.fly(); // ์ถ๊ฐ๋ก fly()๋ ์คํ
}
void fly() {
}
void main() {
var hero = SuperHero();
hero.run();
hero.fly();
print(hero.name); // ์์
}
6) ์ถ์ ํด๋์ค
- ์ถ์ ๋ฉ์๋ ํฌํจํ๋ ํด๋์ค(์ถ์ ๋ฉ์๋: ์ ์ธ๋ง ๋๊ณ ์ ์๊ฐ ์๋ ๋ฉ์๋)
abstract class Monster {
void attack();
}
- ๊ทธ๋๋ก ์ธ์คํดํธํ ๋ถ๊ฐ๋ฅ, ๋ค๋ฅธ ํด๋์ค์์ ์ํ๋ฆฌ๋จผํธํ์ฌ ๊ธฐ๋ฅ์ ์์ฑํ๋ ์์ ์ฌ๋ฃ๋ก ์ฌ์ฉ(๋์ ํด๋์ค: implements, ๋ฉ์๋: @override)
- ์ฌ๋ฌ ์ถ์ ํด๋์ค ํ ๋ฒ์ ์ํ๋ฆฌ๋จผํธ ๋ถ๊ฐ๋ฅ! ์ถ์ ํด๋์ค ๊ตฌํํ ๋๋ ๋ชจ๋ ์ถ์ ๋ฉ์๋ ์ฌ์ ์ ํ์
abstract class Flyable {
void fly();
}
class Bat implements Monster, Flyable {
@override
void attack() {
print('ํ ํด๊ธฐ');
}
@override
void fly() {
print('ํ๋ญ');
}
}
7) mixin(๋ฏน์ค์ธ)
- with: ์์ํ์ง ์๊ณ ๋ค๋ฅธ ํด๋์ค ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค๋ฒ๋ผ์ด๋ฉํ ์ ์์ (-> mixin)
class Goblin implements Monster {
@override
void attack() {
print('attack!');
}
}
class DarkGoblin extends Goblin with Hero { // DarkGoblin์ Monster ํด๋์ค, Gobrin ํด๋์ค, Hero ํด๋์ค ๊ธฐ๋ฅ ๋ชจ๋ ์์ -> ๋คํ์ฑ
...
}
8) ์ด๊ฑฐ(enum) ํ์
- ์์ ์ ์ํ๋ ํน์ํ ํํ์ ํด๋์ค, ์์์ฒ๋ผ ์ฌ์ฉํ ์ ์์
- swith ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด enum ํ์ ์ผ๋ก ์ ์๋ ๋ชจ๋ ์์๋ฅผ case๋ก ๊ฒํ ํ๊ธฐ ๋๋ญ์ ์๋ฌ ๋ฐฉ์ง์ ํจ๊ณผ์
enum status { login, logout }
var authStatus = status.logout;
swith(authStatus) {
case Status.login:
print('๋ก๊ทธ์ธ');
break;
case Status.logout: // ์์ผ๋ฉด error
print('๋ก๊ทธ์์');
break;
6. ์ปฌ๋ ์
- List: ๊ฐ์ ํ์ ์ ์๋ฃ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ด์ ์ ์๊ณ ํน์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ์ ์์
- Map: ํค(key)์ ๊ฐ(value)์ ์์ผ๋ก ์ ์ฅํ ์ ์๊ณ , ํค๋ฅผ ํตํด ๊ฐ์ ์ป์ ์ ์์
- Set: ์ค๋ณต์ด ํ์ฉ๋์ง ์๊ณ , ์ฐพ๋ ๊ฐ์ด ์๋์ง ์๋์ง ํ๋จํ๊ณ ์ ํ ๋ ์ฌ์ฉ
1) List
- ๋คํธ๋ ๋ฐฐ์ด ์ ๊ณต X, list ์ฌ์ฉ๋ฒ์ ๋ค๋ฅธ ์ธ์ด์ ๋ฐฐ์ด๊ณผ ํก์ฌ
List<String> items = ['lee', 'seung', 'jae']; // <String>์ ๋ฆฌ์คํธ์ ๋ด๊ธธ ๋ฐ์ดํฐ ํ์ ์ง์ ํ ๊ฒ.
var itmes = ['lee', 'seung', 'jae']; // ํ์ ์ถ๋ก ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก var ์ ์ธ
- dynamic
- ๋ชจ๋ ํ์
๋๋ณ
- ์ฌ๋ฌ ํ์
์ ํ ๋ฆฌ์คํธ์ ๋ฃ๊ฑฐ๋ ์ผ๋ฐ ๋ณ์๋ฅผ ์ ์ธํ ๋๋ ์ฌ์ฉ
List<dynamic> list = [1, 2, 4, 'jae'];
var list = [1, 2, 4, 'jae']; // ๋ช ์์ ์ผ๋ก List<dynamic> ์ฐ๋ ๋์ var ์ฌ์ฉ ๊ฐ๋ฅ
2) ์คํ๋ ๋ ์ฐ์ฐ์(...)
- ...: ์ปฌ๋ ์ ์ ํผ์ณ์ฃผ๋ ์ฐ์ฐ์
- ๋ค๋ฅธ ์ปฌ๋ ์ ์์ ์ปฌ๋ ์ ์ฝ์ ํ ๋ ์ฌ์ฉ
// List<String> items = ['lee', 'seung', 'jae'];
var items = ['lee', 'seung', 'jae'];
var items2 = ['jaejaejae', ...items, 'jaejae'];
3) Map
- ์์๊ฐ ์๊ณ ํ์์ด ๋น ๋ฅธ ์๋ฃ๊ตฌ์กฐ ์ปฌ๋ ์ , ํค(key)-์(value) ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์
- ํค๋ฅผ ์ด์ฉํด ๊ฐ์ ์ป์ ์ ์์(์์ฒญ ํค์ ํด๋นํ๋ ๊ฐ์ด ์์ผ๋ฉด null ๋ฐํ)
// Map<String, String> cityMap = { ...์๋ต...}; ์ ๊ฐ์
var cityMap = {
'ํ๊ตญ': '๋ถ์ฐ';
'์ผ๋ณธ': '๋์ฟ';
'์ค๊ตญ': '๋ถ๊ฒฝ';
};
print(cityMap.length); // 3
print(cityMap['์ค๊ตญ']); // ๋ถ๊ฒฝ
print(cityMap['๋ฏธ๊ตญ']); // null
cityMap['๋ฏธ๊ตญ'] = '์์ฑํด'; // ์๋ก์ด ๊ฐ ์ถ๊ฐ
pirnt(cityMap['๋ฏธ๊ตญ']); // ์์ฑํด
4) Set
- ์ค๋ณต ํ์ฉX
- ์ฃผ์! ๊ฐ ์์ด ๊ทธ๋ฅ {}๋ง ์์ฑํ๋ฉด Set์ด ์๋ Map์ผ๋ก ์ธ์
// Set<String> citySet = {...์๋ต...};๊ณผ ๊ฐ์
var citySet = {'์์ธ', '์์', '์ค์ฐ', '๋ถ์ฐ'};
citySet.add('์์'); // ์ถ๊ฐ
citySet.remove('์์'); // ์ญ์
print(citySet.contains('๋์ฟ')); // ์๋ฃ๊ฐ ์งํฉ์ ์๋์ง ์๋์ง ๊ฒ์ฌํด์ ๊ฒฐ๊ณผ๋ฅผ bool ํ์ ์ผ๋ก ๋ฐํ
'Frontend ๐ > Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Flutter]๋ ์ด์์ ํํ ๋ฆฌ์ผ_(2) (0) | 2022.02.18 |
---|---|
[Flutter]๋ ์ด์์ ํํ ๋ฆฌ์ผ (0) | 2022.02.17 |
[Dart] Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ_(3) (0) | 2022.02.12 |
[Dart] Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ_(1) (0) | 2022.02.11 |
[Flutter] Window์ Flutter ์ค์นํ๊ธฐ (0) | 2022.02.10 |