๐ Dart ๋ฌธ๋ฒ ์ ๋ณต๊ธฐ 1์ฅ
๋ด๊ฐ Dart๋ฅผ ๋ฐฐ์ฐ๋ ๋ชฉ์ ์ Flutter๋ฅผ ์ด์ฉํด์ ๊ฐ๋ฐํด๋ณด๊ณ ์ถ์ ๋ง์ ๋๋ฌธ์.
๊ธฐ๋ณธ์ ์ผ๋ก Dart๋ vold main () { ... }
๋ก ์๋ํ๊ฒ๋จ. ๊ทธ๋ฆฌ๊ณ ์นด๋ฉ์ผ์ด์ค๋ฅผ ๋ฐ๋ฅธ๋ค๊ณ ํจ. ๊ทธ๋ฅ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ OOP๋ฅผ ๋ฐ๋ฅด๊ณ ๋ฌธ๋ฒ๋ ์ด๋ ์ ๋ ๋น์ทํ๋ค๊ณ ์๊ฐํ๊ณ ๋์ด๊ฐ๋๊ฒ ์ข์ ๋ฏ. ๊ทธ๋ฆฌ๊ณ ํ์๋ ์ด๋ฏธ ์ฌ๋ฌ ์ธ์ด๋ฅผ ๊ฒฝํํ๊ธฐ ๋๋ฌธ์, Dart๋ง์ ์๋ก์ด ๋ฌธ๋ฒ์ด๋ ํน์ง์ด ์๋ ์ด์ ์ปดํจํฐ ๋ฌธ๋ฒ์ ๊ณ ์ ํ ํน์ฑ์ ์์ฑํ์ง ์์ ๊ฒ์.
Dart์ ๋ณ์ ์ ์ธ์ ๋งค์ฐ ๋ค์ํ ๋ฐฉ์์ด ์กด์ฌํจ.
var
, String
, bool
, int
, dynamic
๋ฑ๋ฑ ๋งค์ฐ ๋ง์ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์, ์ค์ต์ ์์ฃผ๋ก ์ฐ์ต์ ํ๋๊ฒ ๋น ๋ฅด๊ฒ ๋ฌธ๋ฒ์ ์ตํ ์ ์์์ ์๊ฒ ๋จ.
๋น ๋ฅด๊ฒ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์ตํ๋ณด์.
void main() {
var integer = 1;
var string = '1';
var boolean = true;
int number = 1;
String str = '1';
bool isTrue = true;
print(string + ' ' + str);
print($string + ' ' + $str);
print(${string + ' ' + $str}); // string์ ๋ค๋ฃจ๋ ๋ฒ
}
์ผ๋จ var
๋ก ๋ณ์ ํ ๋น์ด ๊ฐ๋ฅํจ. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก int
, String
, bool
๋ฑ์ผ๋ก ํน์ ํ์
์ ๋ณ์๋ก ํ ๋น์ด ๊ฐ๋ฅํจ. ๋ฌผ๋ก int
, String
, bool
์ ํ ๋ฒ ํ์
์ด ์ ํด์ง๋ฉด ํ์
์ ๋ณ๊ฒฝํ๋ฉด์ ๋ณ์ ํ ๋น์ด ๋ถ๊ฐ๋ฅํจ. var๋ก ํ ๋น ํ ๋์๋ ํ์
์ ์ง์ ํ๊ณ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด(var integer = 1;
) ํ์
๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํจ. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋๊ฒ dynamic
์. ๋ฐ๋ผ์ dynamic
์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์.
void main() {
dynamic name = 'Code';
print(name); // 'Code'
name = 1;
print(name); // 1
}
ํ์ง๋ง ๋ง์ฝ var์ ๊ฒฝ์ฐ์๋ ๋ณ์๋ง ์ ์ธํ๊ณ ํ์ ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ์๋ ๋ณ์ ํ์ ์ ๋ณ๊ฒฝํ์ฌ ์ฌ์ ์ธ์ด ๊ฐ๋ฅํจ.
void main() {
var data;
data = 1;
print(1) // 1
data = '1';
print('1') // '1'
}
๋ค์์ผ๋ก List
๋ฅผ ์ ์ธํ๊ณ ํ ๋นํ๋ ๋ฐฉ๋ฒ๋ ์์. ๊ธฐ๋ณธ์ ์ผ๋ก ์๋์ ๊ฐ์
void main() {
List alphabetList = [ // ์ ์ธํ ๋ ๊ทธ๋ฅ ๋ฌธ์์ด๋ก ํ ๋น ํ ๊ฒ์
'a',
'b',
'c'
];
// ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ธํ๊ณ ์ถ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ฉด ๋จ.
List<String> numList = [ // Java, C#๊ณผ ๋น์ทํจ. ์ด์ ๊ฐ์ ์ฝ๋๋ ์์ ํ์
์ ์ง์ ํ๊ณ ๋ค์ด๊ฐ ๊ฒ.
'1',
'2',
'3'
];
// ๊ธฐ๋ณธ์ ์ผ๋ก index์ ๊ฒฝ์ฐ ์ ๊ทผํ๋ ๊ฒ์ ๋์ผ ํด๋น ์์์ ์ง์ slicing โ [idx]
print(numList[0]); // '1'
// ๊ธธ์ด ๋ฉ์๋ length
print(numList.length) // 3
}
์ด์ ๋ Map์ ์์๋ณผ ๊ฒ์.
void main() {
// python์ dictionary๋ฅผ ์ ์ธํ๋ ๊ฒ๊ณผ ๋์ผ
Map numList = {
'one': '1',
'two': '2',
'three': '3'
};
// ์์ ๊ฐ์ ์๋ฏธ์ ์ฝ๋๋ฅผ ์ง๊ฒ๋๋ฉด
Map<String, String> numList2 = {
'one': '1',
'two': '2',
'three': '3'
};
// ์ด๋ ๊ฒ ์ง์ฃผ๋ฉด ๋จ
// ๋ง์ฝ์ ์ฌ๊ธฐ์ ์์๋ฅผ ํ๋ ์ถ๊ฐํ๊ณ ์ถ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ง๋ฉด ๋จ
numList.addAll({
'four': '4'
});
// ๋๋ ํน์ key์ value๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋จ
numList['one'] = 'ํ๋';
// ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ์ key์ value๋ฅผ ์ญ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋จ
numList.remove('one');
// Key value๋ฅผ ๋ฐ๋ก ๋ฐ๋ก ๋ฐ๊ณ ์ถ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋ฉ
print(numList.keys.toList());
print(numList.values.toLsit());
// ์ฐธ๊ณ ๋ก toList()๋ ๋ฐ์ดํฐ ํ์
์ List๋ก ๋ณํํ๋ ๊ฒ์
// ์ด๊ฒ ๊ทธ๋ฅ ํ๋์ ๋ณ์๋ก ์ ์ธํ ๊ฐ์ฒด๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํจ.
}
์ด์ final
, const
๋ฅผ ์์๋ณผ๊ฒ์
void main() {
final myName1 = 'junku';
final String myName2 = 'Devjun';
// final์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ์ ์์. ๊ฐ๋ณ์ ์ด์ง ์์
const myName3 = 'Dev';
const myName4 = 'Dart';
// const๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ์ ์์. ๊ฐ๋ณ์ ์ด์ง ์์
}
๊ทธ๋ฆฌ๊ณ ๋ ํ๋์ ํน์ง์ final์ build time ๊ฐ์ ๋ชฐ๋ผ๋ ์ ์ธ ๊ฐ๋ฅ. ๊ทผ๋ฐ const๋ build time ๊ฐ์ ๋ชจ๋ฅด๋ฉด ์ ์ธ์ด ๋ถ๊ฐ๋ฅํจ.
void main() {
final now1 = new DateTime.now(); // ์ ์ธ ๊ฐ๋ฅ
const now2 = new DateTime.now(); // ์ ์ธ ๋ถ๊ฐ๋ฅ
// DateTime.now()๋ ํ์ฌ ์๊ฐ์ ์๋ฏธํจ.
}
์ด์ ๋ enum ํ์ ์
enum Status { // ์์ ํญ์ ๋๋ฌธ์
A,
B,
C
}
void main() {
Status status = Status.A;
switch(status) {
case Status.A:
print('It is A');
break;
case Status.B:
print('It is B');
break;
default:
print('์ด๊ฑด ๋ญก๋๊น?');
break;
}
}
์ด์ if๋ฌธ์
void main() {
int num1 = 2;
var num2 = 2;
if (num1 % 2 == 0) {
print('์ง์์');
} else {
print('ํ์์')
}
if (num2 % 2 == 0) {
print('์ง์์');
}
// switch
switch(num1 % 2) {
case 1:
print('ํ์์');
break;
case 0:
print('์ง์์');
break;
default:
print('์ผ๋จ ์์ฐ์๋ ์๋');
break;
}
}
๋ค์์ for๋ฌธ์
void main() {
int total = 0;
List naturalNumberList = [1, 2, 3, 4, 5];
for(int i = 0; i < naturalNumberList.length; i++) {
total += naturalNumberList[i];
}
print(total);
}
์์ ์ฝ๋๋ index slicing์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด๊ณ ์๋์ ๊ฐ์ด ์ฌ์ฉ๋ ํ ์ ์์.
void main() {
int total = 0;
List numberList = [1, 2, 3, 4, 5];
for(int number in numberList) {
total += number;
}
print(total); // 15
}
๋ค์์ while ๋ฌธ์
void main() {
int total = 0;
while(true) {
if(total >= 10) {
break;
} else {
total ++;
}
}
print(total);
} // ์ด๋ ๊ฒ ์งค ์๋ ์๊ณ ์๋์ ๊ฐ์ด ์งค ์๋ ์์
void main() {
int total = 0;
while(total < 10) {
total ++;
}
print(total);
}
์ด๋ป๊ฒ ์ง๋ ๋ง์๋๋ก ์ง๋ ๊ฒ์. do ๊ตฌ๋ฌธ์
void main() {
int total = 0;
do {
print(total); // ๊ทธ๋ฅ while์ body ๋ถ๋ถ์ด ์ด ๋ถ๋ถ์
total ++;
} while(total < 100);
}
์ ๊ทธ๋ฆฌ๊ณ continue๋ ์ฌ์ฉํ ์ ์์ ์ด๊ฑด ๋ฑํ ๋ง์ ์ํ๊ฒ ์. ๊ทธ๋ฅ ์จ์ผ์ง. ์ด์ ํจ์๋ก ใฑใฑ
void main() {
double res = linearExp(1, 2, 3);
print(res); // 5
}
// ํจ์ ์ ์ธ ex) y = ax + b
double linearExp(double a, double b, double x) {
return a*x + b;
} // ์ต์
์์ผ๋ก ๋ฃ์ด์ค์๋ ์์
double linearExp(double a, double x, [double b = 0]) {
return a*x + b; // default b๊ฐ์ด 0์.
}
์ ํจ์ ์ฝ๋๋ ์์น ํ๋ผ๋ฏธํฐ๋ผ ํจ. ๊ทธ๋ฅ ์์น๋ก ๊ฒฐ์ ๋๋ ๊ฒ์. ๊ทผ๋ฐ ์ด์ name parameter๊ฐ ๋ฐ๋ก ์์ผ๋๊น. ์ด๊ฒ๋ ์๋์์ ํ์ธ ใฑ
void main() {
double res = linearExp(1, 2, b:3);
print(res);
}
double linearExp(double a, double x, { // ์ค๊ดํธ๋ก ์ฌ์ฉํ๋ฉด name parameter์.
dynamic b
}) {
return a * x + b;
}
๊ทผ๋ฐ ์ฌ๊ธฐ์ systax ๋ฌธ์ ๋ ์๋์ง๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ์์. ์ง๊ธ ๋ด๊ฐ ์ฌ์ฉํ๋ dartpad.dartlang.org์์ dart ๋ฌธ๋ฒ์ ์ฐ์ตํ๋ ์ค์ธ๋ฐ, ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํจ.
void main() {
double res = linearExp(1, 2, b:3);
print(res);
}
double linearExp(double a, double x, {
double b
}) {
return a * x + b;
}
Error: The parameter 'b' can't have
a value of 'null' because of its type 'double',
but the implicit default value is 'null'.
double b
^
Error: Compilation failed.
์ด๋ฐ ์ค๋ฅ๊ฐ ๋์ฌ ๋ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ํด๋ผ์ฐ๋ ํ๊ฒฝ ๋ด์์ null ๊ฐ์ ํด๊ฒฐํ๋ ์ค๋ฅ๋ฅผ ์ง์ ํ๋ฉด ํด๊ฒฐํ ์ ์์. ์ฌ์ดํธ footer์ ์ด๋ฌํ ์ต์ ์ ํด๋ฆญํด์ ํค์ ํ ์ ์์ผ๋, ํด๋น ๋ถ๋ถ์ ํด๋ฆญํ๊ณ ์ฝ๋๋ฅผ ๋ค์ ์์ํ๋ฉด ์ ๋๋ก ๋ค์ ์๋ํ๋ ๊ฒ์ ํ์ธํ ์ ์์. ์ฐธ๊ณ ใฑ
๊ทผ๋ฐ ์ dynamic์ ์ค๋ฅ๊ฐ ์๋ฌ๋๊ฐ? ์๊ฐํ๋ฉด dynamic๊ณผ double์ ๊ฐ์ ๋ค๋ฃฐ ์ ์๋ ๋ฒ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์. dart์์๋ ๋ชจ๋ ๊ฒ ๊ฐ์ฒด์. double์ ์ค์ํ์ผ๋ก ๊ทธ ๊ฐ์ฒด๋ฅผ ํ์ ์ํด. ํ์ง๋ง dynamic์ ๊ทธ๋ ์ง ์๊ณ ๋ค๋ฃฐ ์ ์๋ ๋ฒ์๊ฐ ๋งค์ฐ ๋ฒ์ฉ์ ์ด๊ธฐ ๋๋ฌธ์, null๊ฐ์ ๋ํ safety๊ฐ ์์ฉํ์ง ์๋ ๊ฒ์. ๊ทธ๋ ๋ค๊ณ ๋ชจ๋ ๊ฑธ dynamic์ผ๋ก ํ ๋นํ์ง ์๋ ๊ฑธ ์ถ์ฒ. ์๋ํ๋ฉด ๋ด ์๊ฐ์ด์ง ํ์ง๋ง, dynamic์ด ํ์ ์ ์ง์ ํด์ ๊ฐ์ ํ ๋นํ๋ ๋ค๋ฅธ ๋ฌด์๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ง ๋ ๋ง์ด ๋จน์ ๊ฒ์. ๊ทธ๋ฌ๋๊น ์ด์ฉ ์ ์๋ ์ํฉ์์๋ ์ฐ๋ ๊ทธ๋ฐ ์ํฉ์ด ์๋๋ฉด ์ต๋ํ ์์ฐ๋ ๊ฒ์ ์งํฅํ๋๊ฒ ๋ง๋๋ฏ.
์ด์ typedef์.
void main() {
calculate(1, 2, add);
calculate(1, 2, subtract);
}
typedef Operation(int x, int y); // Operation ์ ํ๊ธฐ
void add(int x, int y) { // ๊ฐ๊ฐ์ ์ฐ์ฐ์ ์ ํ๊ธฐ
print('${x + y}');
}
void subtract(int x, int y) {
print('${x - y}');
}
void calculate(int x, int y, Operation oper) { // ์ด๊ฒ ์๋ํจ์์ Operation์ oper๋ก ์๋์ํค๊ฒ ๋ค? ์ด๋ฐ ์๋ฏธ์
oper(x, y);
}
์ด๊ฑฐ ์ฝ๊ฐ ์ฝ๋๊ฐ cpp๊ฐ์ ๋๋์ ๊ฐ๊ณ ์์. cpp์ ์์ง ์ ๋ชจ๋ฅด๋ ์ธ์ด๋ผ์ ๊น๊ฒ ์์ง๋ ๋ชปํ์ง๋ง, ํด๋น ์ฐ์ฐ์ ์ ํ๊ณ ์ด๋ฅผ ํจ์๋ก ์คํํ๋ ๋๋์.
์ด์ class์. python์ class ๋ฌธ๋ฒ ๋ณด๋ค๋ java์ class ๋๋์ด ๊ฐํจ.
void main() {
Name name = new Name();
name.sayName();
}
class Name {
String name ='SSAFY';
void sayName() {
print('์ ๋ ${this.name}์
๋๋ค.');
}
}
๊ทธ๋ฌ๋ฉด ์ด๋ฆ์ ๋ฃ์ด์ฃผ๋๋๋ก ํ ์๋ ์๋๊ฐ? ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋.
void main() {
Name name = new Name('SSAFY');
name.sayName();
}
class Name {
final name;
Name( // ์ด ๋ถ๋ถ์ ๋ค์๋ณด๋ฉด์ ์ตํ์ผ ํ ๋ฏ
String name, // String์ด๋ผ๋ name์ธ๋ฐ
) : this.name = name; // ์ด๊ฑธ ์์ name์๋ค๊ฐ ํ ๋นํด์ค. ์ฆ ์ด ๋ถ๋ถ์ ํด๋น ํด๋์ค๋ฅผ ์คํํ๋ฉด ๋ฌด์กฐ๊ฑด ์คํ๋๋ ๋ถ๋ถ์.
void sayName() {
print('์ ๋ ${this.name}์
๋๋ค.'); // ์ถ๋ ฅ
}
}
์กฐ๊ธ ๋ ํ์ฉํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์
void main() {
Name name = new Name('SSAFY', 4);
name.sayName();
name.sayNum();
}
class Name {
// ํด๋์ค์์ ํ์ฉํ ๋ฐ์ดํฐ๋ฅผ final๋ก ์ ์ธ. ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด ์๋๋ค?
// ๊ทธ๋ฐ ์ด์ผ๊ธฐ๋ ๋ชป๋ค์
// ๊ฐ์ฅ ๋จผ์ ์คํ๋์ด ์ฌ์ฉ๋๋ ๋ณ์ ์ด์ง๋ง,
// ๋คํธ ๋ด์์ ์ฐ์ ์์๊ฐ ๋์ง ์์ผ๋ฏ๋ก this๋ฅผ ์ฌ์ฉํด์ ์ ๊ทผํจ.
final name;
final classNum;
// class์์ ๋ฐ์ ์ ๋ค์ด ์ด๋ป๊ฒ ๋ฐ์ดํฐํ ๋๋์ง ์ ์ ์์.
Name(
String name,
int classNum,
) : this.name = name,
this.classNum = classNum;
// ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ํจ์ ๋ถ๋ถ
void sayName() {
print('์ ๋ ${this.name}์
๋๋ค.');
}
void sayNum() {
print('์ ๋ ${this.classNum}์
๋๋ค.');
}
}
์ข ๋ ๋ณต์กํ๊ฒ ์ค์ ํ๋ ๋ฒ. ์ฝ๊ฐ ์ด๋๋ถํฐ ๋ฌธ๋ฒ์ด ๊ผฌ์ด๊ธฐ ์์ํจ. (์๋..)
void main() {
Name name = new Name('SSAFY', 4);
name.sayName();
name.sayNum();
Name kimssafy = new Name.fromMap({
'name': '๊น์ธํผ',
'classNum': 4
});
kimssafy.sayName();
}
class Name {
final name;
final classNum;
Name(
String name,
int classNum,
) : this.name = name,
this.classNum = classNum;
Name.fromMap( // Map์ ํ์ฉํ ๋ฐฉ๋ฒ์.
Map values,
) : this.name = values['name'],
this.classNum = values['classNum'];
void sayName() {
print('์ ๋ ${this.name}์
๋๋ค.');
}
void sayNum() {
print('์ ๋ ${this.classNum}๋ฐ ์
๋๋ค.');
}
}
private ๋ณ์๋ฅผ ์ฌ์ฉํ๋๋ฒ
void main() {
Name name = new Name('SSAFY', 4, 1000);
name.sayName();
name.sayNum();
name.sayId();
Name kimssafy = new Name.fromMap({
'name': '๊น์ธํผ',
'classNum': 4,
'id': 1000,
});
kimssafy.sayName();
kimssafy.sayNum();
kimssafy.sayId();
}
class Name {
final name;
final classNum;
final _id;
// ์ธ๋ ๋ฐ๋ฅผ ์ฐ๋ฉด _id๋ private variable์
Name(
String name,
int classNum,
int id,
) : this.name = name,
this.classNum = classNum,
this._id = id;
Name.fromMap(
Map values,
) : this.name = values['name'],
this.classNum = values['classNum'],
this._id = values['id'];
void sayName() {
print('์ ๋ ${this.name}์
๋๋ค.');
}
void sayNum() {
print('์ ๋ ${this.classNum}๋ฐ ์
๋๋ค.');
}
void sayId() {
print('์ ์ ๋ฒํธ๋ ${this._id}๋ฒ ์
๋๋ค.');
}
}
์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์คํ๋จ.. ๐คญ๐คญ๐คญ๐คญ๐คญ๐คญ๐คญ๐คญ
์๋ ๋๋ฉด ์๋จ. private ๋ณ์๋ ์ค์ฝํ๊ฐ ์์ด์ ๊ฐ์ ธ์ฌ ์ ์์. ๊ทผ๋ฐ ๊ฐ์ ธ์ดโฆ. ์??
dart์์๋ ํ ํ์ผ ๋ด์์ ์๋ํ๋ class๋ฅผ ํ์ ์ผ๋ก private ๋ณ์๋ฅผ ๊ฐ์ ธ์ด. ์์ฒญ๋ ํน์ง์. ์ด๊ฑด ๊ธฐ์ตํด์ผํจ.
๊ทธ๋๊น ๋ค๋ฅธ dart ํ์ผ ๋ด์์ ์ด๋ฅผ ์๋์ํค๋ฉด _id๋ฅผ ๊ฐ์ ธ์ค์ง ๋ชปํจ. ๊ธฐ์ตํ์ . ์ฆ ํ์ผ ๋จ์๋ก private ๋ณ์๊ฐ ๋ค๋ค์ง.
์ด์ getter์ setter์. ์์ ์ฝ๋์ class์์ ์๋ ์ฝ๋๋ง ์ถ๊ฐ์ํค๋ฉด ๋จ. ๊ทผ๋ฐ final _id
๋ฅผ int _id
๋ก ๋ฐ๊พธ๋๊ฑด ์ผ์ค์ final์ ๋ณ์ ๋ชป๋ฐ๊ฟ.
void main() {
Name kimssafy = new Name('kimssafy', 1, 20);
print(kimssafy.id);
kimssafy.id = 100000;
print(kimssafy.id);
}
class Name {
//...
get id {
return this._id;
}
set id(int id) {
this._id = id;
}
}
extends๋ ๋ค์๊ณผ ๊ฐ์
void main() {
ClassNum kimssafy = new ClassNum('kimssafy', 1, 20);
kimssafy.sayClassNum();
}
class Name {
// ...
}
class ClassNum extends Name {
ClassNum(
String name,
int classNum,
int _id,
) : super(
name,
classNum,
_id,
);
void sayClassNum() {
print("์ ๋ ${this.classNum}๋ฐ ์
๋๋ค.");
}
}
๊ทธ ๋ค์์ method overriding์
void main() {
Parent parent = new Parent(3);
int result = parent.square();
print(result);
Child child = new Child(3);
int result2 = child.square();
print(result2);
}
class Parent {
final int number;
Parent(
int number,
) : this.number = number;
int square() {
return this.number * this.number;
}
}
class Child extends Parent {
Child(
int number,
) : super(number);
@override
int square() {
return this.number + this.number;
}
}
// ์๋์ ๊ฐ์ด ์งค์๋ ์์.
class Parent {
final int number;
Parent(
int number,
) : this.number = number;
int square() {
return this.number * this.number;
}
}
class Child extends Parent {
Child(
int number,
) : super(number);
@override
int square() {
int result = super.square();
return result + result
}
}
// Child child = new Child(3)์ ๋ฃ๊ณ
// int result2 = child.square();
// print(result2) // 18์
๋ค์์ผ๋ก ์คํํฑ์
void main() {
Employee kimssafy = new Employee('๊น์ธํผ');
Employee parkssafy = new Employee('๋ฐ์ธํผ');
Employee.community = 'SSAFY';
print('--๊น์ธํผ--');
kimssafy.printNmaeAndBuilding();
print('--๋ฐ์ธํผ--');
parkssafy.printNmaeAndBuilding();
Employee.community = '๋ฉํฐ์บ ํผ์ค';
print('--๊น์ธํผ--');
kimssafy.printNmaeAndBuilding();
print('--๋ฐ์ธํผ--');
parkssafy.printNmaeAndBuilding();
Employee.printBuilding();
}
class Employee {
static String community;
String name;
Employee(
String name,
) : this.name = name;
void printNmaeAndBuilding() {
print('์ ์ด๋ฆ์ $name์
๋๋ค. $community ์์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.');
}
static void printBuilding() {
print('์ ํฌ๋ $community ์์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.');
}
}
๋ค์์ ๋คํธ์ ์ธํฐํ์ด์ค์. ์กฐ๊ธ ํน์ดํจ. ์๋๋ฉด class๋ฅผ ์ธํฐํ์ด์ค๋ก ํ์ฉํ ์ ์์.
void main() {
ClassNum kimssafy = new ClassNum(4);
kimssafy.sayClassNum();
new ClassNum(4)
..sayClassNum()
..sayGroup();
}
class ClassNumInterface {
void sayClassNum() {}
}
class ClassNum implements ClassNumInterface {
int classNum;
String group = '์๊ณ ๋ฆฌ์ฆ ์คํฐ๋';
ClassNum(
int classNum,
) : this.classNum = classNum;
void sayClassNum() {
print('์ ๋ ${this.classNum}๋ฐ ์
๋๋ค.');
}
void sayGroup() {
print('์ ๋ ${this.group}์ ํ๊ณ ์์ต๋๋ค.');
}
}
ํด๋์ค๋ฅผ ๊ณง๋ฐ๋ก ์ธํฐํ์ด์ค๋ก ํ์ฉํจ. ์์ฐ,,,,
๊ทธ ๋ค์์ getters์.
void main() {
List ssafy = [
1,
2,
3,
4,
5,
];
// getters
print(ssafy.first); // ์ฒซ์์
print(ssafy.isEmpty); // ๋น์๋๊ฐ?
print(ssafy.isNotEmpty); // ์ ๋น์๋๊ฐ?
print(ssafy.length); // ๊ธธ์ด
print(ssafy.last); // ๋ง์ง๋ง ์์
print(ssafy.reversed); // ๋ฆฌ๋ฒ์ค
}
void main() {
List ssafy = [
1,
2,
3,
4,
5,
];
// ์ถ๊ฐ
ssafy.add(6);
print(ssafy); // [1, 2, 3, 4 ,5 ,6]
// ํ ๋ฒ์ ์ถ๊ฐ
ssafy.addAll([7, 8, 9]);
print(ssafy); // [1, 2, 3, 4 ,5 ,6, 7, 8]
}
void main() {
List memberList = [
{
'id':1,
'name': 'kimssafy'
},
{
'id':2,
'name': 'parkssafy'
},
{
'id':3,
'name': 'leessafy'
}
];
var item = memberList.firstWhere((item) => item['id'] == 1);
print(item);
var index1 = memberList.indexWhere((item) => item['id'] == 1);
print(index1);
var index2 = [10, 20, 30].indexOf(20);
print(index2);
var contains = [10, 20, 30].contains(30);
print(contains);
}
๋ฆฌ์คํธ์ ๊ดํ ์ฌ๋ฌ๊ฐ์ง ๋ฃจํ ๋ฒ
void main() {
List memberList = [
{
'id':1,
'name': 'kimssafy',
'group': 1
},
{
'id':2,
'name': 'parkssafy',
'group': 4
},
{
'id':3,
'name': 'leessafy',
'group': 2
}
];
memberList.forEach((item) { // js๋ ๊ฐ์
print(item);
});
var newList = memberList.map((item) {
return item['name']; // name๋ง ๋ค ๋ฝ๊ธฐ
});
print(newList);
var fold = memberList.fold(0, (t, e) {// t์ e์ ๋ณ์ ํ์
์ด ๋๊ฐ์ง ์์๋ ๊ด์ฐฎ์
return t + e['id']; // t๋ 0๋ถํฐ ์์ e์ id๊ฐ์ ๋ค ๋ํ๊ธฐ
});
print(fold);
var reduce = [1, 2, 3, 4, 5].reduce((t, i) => t + i); // lambda ํจ์์ ๋น์ท
// t์ i์ ๋ณ์ ํ์
์ด ๋๊ฐ์์ผํจ, t์ 1, 2, 3, 4, 5 ๋ค ๋ํ๊ธฐ
print(reduce);
}
๋ฆฌ์คํธ๋ฅผ ๋ค๋ฃจ๋ ๋ค์ํ ๋ฐฉ๋ฒ๋ค
void main() {
List numberList = [10, 20, 30, 40, 50];
numberList.remove(10); // 10์ ์ง์
print(numberList);
numberList.removeAt(1); // ์ธ๋ฐ์ค๊ฐ 1์ธ๊ฑธ ์ง์
print(numberList);
numberList.removeWhere((e) => e == 50); // ๊ฐ์ด 50์ด๋ฉด ์ญ์
print(numberList);
List numberList2 = [10, 20, 30, 40, 50];
numberList2.shuffle(); // ์์
print(numberList2);
}