var
var
๋ ์ฌ์ ์ธ ๋ถ๊ฐ โ
var name = 'flutter';
var name = 'new_flutter'; // error -> ์ฌ์ ์ธ ๋ถ๊ฐ
int
int num1 = 10;
int num2 = 15;
print(num1+num2); // 25
double
์์์ ํํ ๊ฐ๋ฅ
double num1 = 2.5;
double num2 = 0.5;
print(num1 + num2); // 3
bool
bool isTrue = true;
bool isFalse = false;
String
String str1 = 'flutter';
String str2 = 'dart';
print(`${str1} ${str2}`); // 'flutter dart'
print('$str1 $str2'); // 'flutter dart' <- {} ์ค๊ดํธ ์๋ต ๊ฐ๋ฅ
โย
var
์String
์ ์ฐจ์ด๋?
๐ขยvar
type์ ๋ฐ๋ก ์กด์ฌํ์ง ์์ผ๋ฉฐ ์๋์ผ๋ก ํ์ ์ ์ถ๋ก ํ๋คvar num = 20; // int type var str = 'Hi'; // String type
var name = 'Tom';
print(name.runtimeType); // String
๋ชจ๋ ํ์ ์ผ๋ก ์ ์ธ ๊ฐ๋ฅ !
๐ย dynamic
: ๋ค๋ฅธ ํ์
์ผ๋ก ์ฌ์ ์ธ โญ๏ธย / var
: ๋ค๋ฅธ ํ์
์ผ๋ก ์ฌ์ ์ธ โ
dynamic name = 'flutter';
dynamic num = 1;
name = 5; // String -> int type์ผ๋ก ์ฌ์ ์ธ ๊ฐ๋ฅ
// dynamic์ ๋ค๋ฅธ ํ์
์ผ๋ก ์ฌ์ ์ธ ๊ฐ๋ฅ
// But, var๋ ๋ค๋ฅธ ํ์
์ผ๋ก ์ฌ์ ์ธ ๋ถ๊ฐ
var name2 = 'flutter';
name2 = 6; // error -> ์ฒ์ ์ ์ธํ ํ์
์ผ๋ก ๊ณ ์ ๋์ด ์ฒ์ ์ ์ธํ ํ์
์ผ๋ก๋ง ์ฌ์ ์ธ ๊ฐ๋ฅ
์๋ฌด๋ฐ ๊ฐ๋ ์์ง ์์
nullable
: null ๊ฐ๋ฅnon-nullable
: null ๋ถ๊ฐ๋ฅ
String name = 'flutter';
name = null; // error
?
๋ฅผ ๋ถ์ด๋ฉด null ์ ์ธ ๊ฐ๋ฅString? name2 = 'dart;
name2 = null;
print(name2!); // nullableํ ๊ฐ ๋ค์ `!`๋ฅผ ๋ถ์ด๋ฉด ํด๋น ๊ฐ์ null์ด ์๋์ ๋ช
์ํด์ฃผ๋ ๊ฒ
๋ณ์ ์ ์ธ์ ํด๋น ๋ณ์ ํ์ ์์ ์์ฑ
final String name1 = 'flutter';
name1 = 'dart'; // error -> finial ์ ์ธ์ ํ๋ฒ ๋ณ์๋ฅผ ์ ์ธํ ํ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ
const String name2 = 'dart';
name2 = 'flutter'; // error -> final๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก const ์ ์ธ์์๋ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ
// final, const ์ ์ธ์ var ํค์๋ ์๋ต ๊ฐ๋ฅ
final name1 = 'flutter';
const name2 = 'dart';
โย final
vs const
์ฐจ์ด์
final
: ๋น๋ํ์์ ๊ฐ์ ์๊ณ ์์ง ์์๋ okconst
: ๋น๋ํ์์ ๊ฐ์ ์๊ณ ์์ด์ผ ํจDateTime now = DateTime.now(); // ํ์ฌ ์๊ฐ ์ถ๋ ฅ (ํด๋น ์ฝ๋๊ฐ ์คํ๋ ๋์ ์๊ฐ ์ถ๋ ฅ)
print(now); // 2024-04-21 16:55:36.946
final DateTime now = DateTime.now();
const DateTime now = DateTime.now(); // error
// why error? DateTime.now()๋ ์ฝ๋๊ฐ ์คํ๋ ๋์ ์๊ฐ์ ์ถ๋ ฅํ๋ฏ๋ก ๋น๋ํ์์ ๊ฐ์ ์๊ณ ์์ง ๋ชปํด์ error
+
,-
,*
,/
,%
์ฐ์ฐ์ ํด๋ ์ ์ธํ ๋ณ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด ์ ์ฅ๋์ง ์๋๋ค
int num = 2;
// %: ๋๋จธ์ง
print(num % 2); // 0
print(num); // 2 -> num ๊ฐ ๋ณ๊ฒฝ X
// ์ฌ์ ์ฅ
num ++; // num = num + 1; ๊ณผ ๋์ผํ ์๋ฏธ๋ก ๊ฐ์ ์ฌํ ๋นํ ๊ฒ์ด๋ฏ๋ก ๊ฐ์ด ๋ณ๊ฒฝ๋จ
print(num); // 3 -> num ๊ฐ ๋ณ๊ฒฝ๋จ
num --;
print(num); // 2 -> num ๊ฐ ๋ณ๊ฒฝ๋จ
num += 5;
print(num); // 7 <- 2+5
??=
: ์ขํญ๊ฐ์ด null์ด๋ฉด ์ฐํญ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋ผdouble? num = 4.0; // null๊ฐ ํ ๋น ํ์ฉ
num = 2.0;
print(num); // 2
num = null;
num ??= 3.0; // num ๊ฐ์ด null์ด๋ฉด ์ฐํญ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋ผ
print(num); // 3
num = 2.0;
num ??= 3.0;
print(num); // 2 -> num ๊ฐ์ด null์ด ์๋๋ฏ๋ก ๊ธฐ์กด ๊ฐ ์ ์ง
int num1 = 1;
int num2 = 2;
print(num1 >= num2); // false (1 >= 2)
print(num1 == num2); // false (1 == 2)
print(num1 != num2); // true (1 != 2)
- value
is
type : value์ ํ์ ์ด type๊ณผ ๋์ผํ์ง ํ์ ๋น๊ต (๋์ผํ๋ฉด true)- value
is!
type: value์ ํ์ ์ด type๊ณผ ๋์ผํ์ง ์์ผ๋ฉด true
int num1 = 1;
print(num1 is int); // true
print(num1 is String); // false
print(num1 is! int); // false
&&
: and ์กฐ๊ฑด (๋ชจ๋ true์ฌ์ผ true)bool result1 = 12 > 10 && 1 > 0;
print(result1); // true && true => true
||
: or ์กฐ๊ฑด (ํ๋๋ผ๋ true์ฌ์ผ true) bool result2 = 12 > 0 || 0 > 1;
print(result2); // true || false => true
List<String> langs = ['js', 'java', 'node'];
List<int> numbers = [1, 2, 3, 4];
print(langs[0]); // 'js'
print(langs[3]); // error -> List ์ ์ฒด ์ฌ์ด์ฆ๋ฅผ ๋ฒ์ด๋๋ index ๊ฐ์ ๋ถ๋ฌ์ฌ ์ ์์
print(langs.length); // 3 -> ๊ธธ์ด ์ถ๋ ฅ
// ๊ฐ ์ถ๊ฐ
langs.add('python');
print(langs); // [js, java, node, python]
// ๊ฐ ์ญ์
langs.remove('python');
print(langs); // [js, java, node]
// ๋ฐฐ์ด ๋ด ํน์ ์์ ๊ฐ index ์ฐพ๊ธฐ
print(langs.indexOf('java')); // 1
Key: value
Map<String, bool> isFruit = {
'Banana': true,
'Apple': true,
'Peach': true,
};
print(isFruit); // { Banana: true, Apple: true, Peach: true }
// ๊ฐ ์ถ๊ฐ
isFruit.addAll({ 'Spider': false });
isFrunt['Ant'] = false;
print(isFruit); // { Banana: true, Apple: true, Peach: true, Spider: false, Ant: false }
print(isFruit['Banana']); // true
// ๊ฐ ๋ณ๊ฒฝ (Map์ ์ด๋ฏธ ์กด์ฌํ๋ Key์ธ ๊ฒฝ์ฐ)
isFruit['Ant'] = true;
print(isFruit); // { Banana: true, Apple: true, Peach: true, Spider: false, Ant: true }
// ๊ฐ ์ญ์
isFruit.remove('Ant');
print(isFruit); // { Banana: true, Apple: true, Peach: true, Spider: false }
// key ๊ฐ๋ง ์ถ๋ ฅ
print(isFruit.keys); // (Banana, Apple, Peach, Spider)
// value ๊ฐ๋ง ์ถ๋ ฅ
print(isFruit.values); // (true, true, true, false)
final Set<string> names = {
'flutter',
'dart',
'js',
'flutter',
}
print(names); // { flutter, dart, js } <- ์ค๋ณต ๊ฐ์ด ์กด์ฌํ๋ฉด ํ๋ฒ๋ง ์ถ๋ ฅ
names.add('java'); // ๊ฐ ์ถ๊ฐ
names.remove('java'); // ๊ฐ ์ญ์
print(names.contains('flutter')); // true
๐ย contains('str')
: str ๊ฐ์ด ์กด์ฌํ๋์ง์ ์ฌ๋ถ ํ๋จ
โย List
vs Set
์ฐจ์ด์
List
: ์ค๋ณต๊ฐ ์กด์ฌ ๊ฐ๋ฅ โญ๏ธSet
: ์ค๋ณต๊ฐ ์กด์ฌ ๋ถ๊ฐ๋ฅ โ โ ์ค๋ณต์ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค๋ค๋ ์ฅ์ if (์กฐ๊ฑด๋ฌธ) {
// if ์คํ๋ฌธ1;
} else if () {
// else if ์คํ๋ฌธ2;
} else {
// else ์คํ๋ฌธ3;
}
switch(์กฐ๊ฑด๋ฌธ) {
case 0:
// case0 ์คํ๋ฌธ1;
break;
case 1:
// case1 ์คํ๋ฌธ2;
default:
// default ์คํ๋ฌธ3;
break;
}
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // ํด๋น ๋ฃจํ ๋น ์ ธ ๋์์ ๋ค์ i ๋ฃจํ ์คํ
}
print(i); // 5๋ง ์ถ๋ ฅ X
}
List<int> numbers = [1, 2, 3, 4, 5, 6];
// js์ ๋ฌ๋ฆฌ for_of๋ฌธ์ ์กด์ฌํ์ง ์์ ๋ฐฐ์ด ์ํ์ for_in๋ฌธ ์ฌ์ฉ
for (int num in numbers) {
print(num);
}
while
: ์กฐ๊ฑด์ ๋จผ์ ํ์ธํ ๋ค์์ ์คํ๋ฌธ ์คํint total = 0;
// total < 10 ์กฐ๊ฑด์ ๋ง์กฑํ ๋๊น์ง ์ํ
while (total < 10) {
total += 1;
if (total == 5) {
break; // loop ํ์ถ
}
}
do-while
: ๋จผ์ ์คํ๋ฌธ ์คํํ ๋ค์์ ์กฐ๊ฑด๋ฌธ ํ์ธ (์ ์ฌ์ฉ X)do {
total += 1;
} while (total < 10);
print(total); // 10
๋ช ํํ ํ์ ์ด ์กด์ฌํ๋ค๋ฉด ๊ทธ ํ์ ๋ค๋ง ์ฌ์ฉํ ์ ์๊ฒ ๊ฐ์ ํ ์ ์์
enum Status {
approved, // ์น์ธ
pending, // ๋๊ธฐ
rejected, // ๊ฑฐ์
}
Status status = Status.approved;
if (status == Status.approved) {
print('์น์ธ');
} else if (status == Status.pending) {
print('๋๊ธฐ');
} else {
print('๊ฑฐ์ ');
}
parameter
= argument
= ๋งค๊ฐ๋ณ์
positional parameter
: ์์๊ฐ ์ค์ํ ํ๋ผ๋ฏธํฐoptional parameter
([]
): ํ์๊ฐ ์๋ ํ๋ผ๋ฏธํฐ (๊ธฐ๋ณธ๊ฐ ์ค์ ํด์ฃผ๋ฉด error๋์ง ์์)
// int type return
// optional parameter: y, z
int addNumbers(int x, [int y = 20, int z = 30]) { // ํธ์ถ์ y, z ์๋ตํ๋ฉด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋จ
int sum = x + y + z;
if (sum % 2 == 0) { print('์ง์') }
else { print('ํ์') }
return sum;
}
named parameter
: ์ด๋ฆ์ด ์๋ ํ๋ผ๋ฏธํฐ๋ก{}
์ค๊ดํธ ๋ด์ ์์ฑ (์์ ์ค์ โ)required
์์ฑ์ default๋ก ๋ถ์ด์ง ์์
addNamedNumbers({required int x, required int y, int z = 30}) {
int sum = x + y + z;
if (sum % 2 == 0) { print('์ง์') }
else { print('ํ์') }
}
// position parameter & named parameter mixํด์ ์ฌ์ฉ ๊ฐ๋ฅ
int addMixNumbers(int x, { rquired int y, int z = 30 }) {
...
}
// void: return์ด ์์์ ์๋ฏธ
void main() {
int result = addNumbers(10, 20, 30);
int result2 = addNumbers(20);
addNamedNumbers(x: 10, y: 20, z: 30);
addnamedNumbers(y: 10, z: 20, x: 30);
// named parameter๋ฅผ ๋ฐ์ผ๋ฏ๋ก ์์ ๋ฐ๊ปด๋ ์๊ด์์ด name ์ง์ ํ๋๋ก ๊ฐ ํ ๋น๋จ
addMixNumbers(10, y: 20);
}
// [์ ์ธ]
// sinature
typedef Operation = int Function(int x, int y, int z);
// ๋ํ๊ธฐ
int add(int x, int y, int z) => x + y + z;
// ๋นผ๊ธฐ
int substract(int x, int y, int z) => x - y - z;
// ๊ณ์ฐ
int calculate(int x, int y, int z, Operation operation) {
return operation(x, y, z);
}
// [ํธ์ถ]
Operation operation = add;
int result = operation(10, 20, 30);
print(result); // 60
operation = substract;
int result2 = operation(10, 20, 30);
print(result2); // -40
int result3 = calculate(30, 40, 50, add);
print(result3); // 120
int result4 = calculate(40, 50, 60, subtract);
print(result4); // -70
int arrowFun(int x, {required int y, int z = 30}) => x + y + z;