[25.06.23 TIL] Dart 기초 & 심화 문법

김영민·2025년 6월 23일

🎯 오늘은 Dart 프로그래밍 강의 중 인트로, SDK, 기초 & 심화 문법을 들었다.
문법은 학습을 했기도 했지만, 연산자의 경우 개념을 다시 확인해보는 느낌이었고, 다른 부분도 좀 더 헷갈리지 않게 개념을 잡고 가도록 강의가 진행되어 개념을 확립하기 좋았다.


💬 Dart 기초 문법

🔥 변수와 데이터 타입

✏️ 변수

🔍 값을 변경할 수 있는 변수

int name = "hayancode"; //타입 변수이름 = 값;
var today = 250623; // 타입추론 > var 변수이름 = 값;

🔍 값을 변경할 수 없는 변수 - 상수(Constant)
final - final [타입][변수 이름] = [값];
const - const [타입][변수 이름] = [값];

✅ 타입 생략 가능 ⭕


🕐 초기화 시점
final - 프로그램 실행(런타임)
const - 컴파일 시점


💡 용도
final - 프로그램 실행 중 값이 결정되는 경우
const - 프로그램 실행 전후 상관없이 항상 값이 고정인 경우


late

late String name; // 타입 생략 불가❌

✅ 선언 후 초기화되는 NonNullable
✅ 변수가 사용되는 시점에 초기화(지연 초기화)되는 변수

int getTemperature(int temperature) {
  return temperature;
}
//
void main() {
  late int temperature = getTemperature(35);
}

main() 에 있는 temperature 변수가 사용되지 않았기 때문에, getTemperature(35); 는 실행되지 않는다.
⭕ 뒤에 print(temperatur); 를 작성한다면, temperatrure을 사용하기 때문에 실행된다.


✏️ 데이터 타입

📁 숫자형(Numbers)

int - 정수

int today = 250623;

double - 소수

double z = 1; // double z = 1.0 와 같아요.
z += 2.5;
print(z); // 3.5

num

num a = 1;
a += 2.5;
print(a); // 3.5

intdouble의 상위 클래스
object 의 하위 클래스


📁 문자형

String

String name = 'Bob';
print('Hello, my name is $name.'); // Hello, my name is Bob.
print('Hello, my name is ${name.toUpperCase()}.'); // Hello, my name is BOB.
String word = 'HELLO';
print('hello' == word.toLowerCase()); // true

', " 둘 다 가능
toUpperCase()는 문자열 모두 대문자로 변환
toLowerCase()는 문자열 모두 소문자로 변환


String s1 = '''
이렇게 하면
여러 줄의 문자열을
만들 수 있다
''';
String s2 = """이것도
여러 줄의
문자열이다 !""";

''', """ 을 사용하면 여러줄의 문자열을 만들 수 있다.


📁 불리언형

bool
true false 만 가능


✏️ null

int? a = null;

null 을 허용하는 변수에 ?를 붙여 사용한다.


int? nullableInt;
print(nullableInt); // null
//
nullableInt = 1;
print(nullableInt); // 1
//
nullableInt = null;
print(nullableInt); // null
//
int nonNullableInt;
print(nonNullableInt); // Error

null 을 허용하는 변수는 초기값이 설정되지 않으면 기본적으로 null 을 가진다.


💡 ?. 연산자

String? name;
print(name?.length); // null
//
name = 'Bob';
print(name?.length); // 3

null 을 오류 없이 안전하게 쓰고 싶다면 ?. 를 사용한다.

isOdd 의 경우 홀수냐는 뜻으로, 값 4을 print(num?.isOdd); 하면 false로 값이 나온다.


🔥 연산자(Operators)

✏️ 산술 연산자(Arithmetic Operators)

📁 +

int two = 2;
int three = 3;
print(two + three); // 5

📁 -

int two = 2;
int three = 3;
print(three - two); // 1
print(two - three); // -1

📁 *

int two = 2;
int three = 3;
print(two * three); // 6

📁 /

int five = 5;
int two = 2;
print(five / two); // 2.5

📁 ~/

int five = 5;
int two = 2;
print(five ~/ two); // 2

/ 와 동일하게 값을 나누지만, 정수만 반환한다.


📁 %

int six = 6;
int four = 4;
print(six % four); // 2

✔ 값을 나누었을 때 나오는 나머지 를 구할 때 사용한다.


✏️ 비교 연산자(Comparison Operators)

📁 ==

int a = 4;
int b = 4;
print(a == b); // true
//
int c = 2;
int d = 4;
print(c == d); // false
//
int? e = null;
int? f = null;
print(e == f); // true
//
int? g = null;
int? h = 2;
print(g == h); // false

✔ 2개의 값이 같으면 true, 다르면 false 를 반환한다.


📁 !=

int a = 2;
int b = 4;
print(a != b); // true
//
int c = 4;
int d = 4;
print(c != d); // false
//
int? e = null;
int? f = 2;
print(e != f); // true
//
int? g = null;
int? h = null;
print(g != h); // false

== 과 반대로 2개의 값이 다르면 true, 같으면 false 를 반환한다.


📁 >

int a = 4;
int b = 2;
print(a > b); // true
//
int c = 2;
int d = 4;
print(c > d); // false

📁 <

int a = 2;
int b = 4;
print(a < b); // true
//
int c = 4;
int d = 2;
print(c < d); // false

📁 >=

int a = 4;
int b = 2;
print(a >= b); // true
//
int c = 3;
int d = 3;
print(c >= d); // true
//
int e = 2;
int f = 4;
print(e >= f); // false

✔ 왼쪽 값이 오른쪽 값보다 크거나 같으면 true, 작으면 false를 반환한다.


📁 <=

int a = 2;
int b = 4;
print(a <= b); // true
//
int c = 3;
int d = 3;
print(c <= d); // true
//
int e = 4;
int f = 2;
print(e <= f); // false

✔ 왼쪽 값이 오른쪽 값보다 작거나 같으면 true, 크면 false를 반환한다.


✏️ 타입 체크 연산자(Type Test Operators)

✅ 프로그램 실행 중(런타임)에 타입을 검사할 때 사용한다.

📁 as - 형변환(Type Casting)

int a = 2;
print(a as double); // 2
//
String b = '2';
print(b as double); // TypeError 발생

✔ 타입을 변환할 때 사용한다.
✔ 단, 형변환이 가능할 때만 사용해야 하며, 형변환이 불가능한 경우 오류가 발생한다.


📁 is

int? a = 2;
print(a is int); // true
//
int? b = null;
print(b is int); // false

✔ 특정 타입을 가지고 있는지 판별할 때 사용한다.
✔ 해당할 경우 true, 아닐 경우 false 를 반환한다.


📁 is!

int? a = null;
print(a is! int); // true
//
int? b = 2;
print(b is! int); // false

is와 반대로 특정 타입을 가지고 있지 않는지 판별한다.
✔ 해당되지 않을 경우 true, 해당될 경우 false 를 반환한다.


✏️ 대입 연산자(Assignment Operators)

📁 =

int a = 2;
print(a); // 2

📁 ??=

int? a = null;
a ??= 2;
print(a); // 2
//
int b = 3;
b ??= 2;
print(b); // 3

??= 왼쪽에 있는 것이 null일 때 오른쪽 값을 대입한다.


📁 +=

int a = 2;
int b = 3;
a += b; // a = a + b
print(a); // 5

+= 왼쪽과 오른쪽 값을 더해서 왼쪽에 대입한다.


📁 -=

int a = 3;
int b = 2;
a -= b; // a = a - b
print(a); // 1

-= 왼쪽 값에서 오른쪽 값을 빼서 왼쪽에 대입한다.


📁 *=

int a = 2;
int b = 3;
a *= b; // a = a * b
print(a); // 6

*= 왼쪽 값에서 오른쪽 값을 곱해서 왼쪽에 대입한다.


📁 /=

double a = 6;
int b = 3;
a /= b; // a = a / b
print(a); // 2

/= 왼쪽 값에서 오른쪽 값을 나눠서 왼쪽에 대입한다.


📁 ~/=

int a = 5;
int b = 3;
a ~/= b; a = a ~/ b
print(a); // 1

✔ 위와 동일하게 나누되 정수만 반환한다.


📁 %=

int a = 5;
int b = 3;
a %= b; // a = a % b
print(a); // 2

✏️ 논리 연산자(Logical Operators)

✅ 참 또는 거짓으로 판별할 수 있는 표현식을 반전하거나 결합할 때 사용한다.

📁 !

bool a = true;
print(!a); // false

! 오른쪽에 있는 판별식을 반전한다.


📁 ||

bool a = true;
bool b = true;
print(a || b); // true
//
bool c = true;
bool d = false;
print(c || d); // true
//
bool e = false;
bool f = false;
print(e || f); // false

|| 왼쪽 판별식과 오른쪽 판별식 중 하나라도 참이면 true, 모두 거짓이면 false 를 반환한다.


📁 &&

bool a = true;
bool b = true;
print(a && b); // true
//
bool c = true;
bool d = false;
print(c && d); // false
//
bool e = false;
bool f = false;
print(e && f); // false

&& 왼쪽과 오른쪽 판별식 둘 다 참이면 true, 하나라도 거짓이면 false 를 반환한다.


🔥 조건문

✏️ if-else

📁 if

int a = -1;
if (a < 0) {
	print('a 는 음수입니다.'); // a 는 음수입니다.
}

📁 else if

int a = 0;
if (a < 0) {
	print('a 는 음수입니다.');
} else if (a >= 0) {
	print('a 는 0 이거나 양수입니다.'); // a 는 0 이거나 양수입니다.
}

📁 else

int a = 3;
if (a < 0) {
	print('a 는 음수입니다.');
} else if (a == 0) {
	print('a 는 0 입니다.');
} else {
	print('a 는 양수입니다.'); // a 는 양수입니다.
}

✏️ switch

int dayOfWeek = 1;
//
switch (dayOfWeek) {
  case 1:
    print('오늘은 월요일입니다.');
    break;
  case 2:
    print('오늘은 화요일입니다.');
    break;
  case 3:
    print('오늘은 수요일입니다.');
    break;
  case 4:
    print('오늘은 목요일입니다.');
    break;
  case 5:
    print('오늘은 금요일입니다.');
    break;
  case 6:
    print('오늘은 토요일입니다.');
    break;
  case 7:
    print('오늘은 일요일입니다.');
    break;
  default:
    print('유효하지 않은 숫자입니다.');
}

✔ 어떤 특정 값에 대한 경우를 모두 생각해 주어야 할 때 사용한다.


✏️ 조건 표현식

📁 조건문 ? 표현식1 : 표현식2

조건식 ? 참일 때 값 : 거짓일 때 값;
bool isPublic = true;
String visibility1 = isPublic ? 'public' : 'private';
print(visibility1); // public
//
bool isPrivate = false;
String visibility2 = isPrivate ? 'public' : 'private';
print(visibility2); // private

조건문이 참이면 표현식1 을, 조건문이 거짓이면 표현식2 를 따른다.
✏️ 삼항 연산자(Ternary Operator) 지난 시간에 학습한 내용이다.


📁 표현식1 ?? 표현식2

int? a = null;
print(a ?? 2); // 2
//
int b = 3;
print(b ?? 2); // 3

표현식1 이 null 값을 갖지 않으면 표현식1 을, 표현식1 이 null 값을 가지면 표현식2 를 따른다.
??null이면 기본값 사용


🔥 반복문과 주석

✏️ 반복문

📁 for
👉 for (초기화식, 조건식, 증감식) { … }

String message = 'Dart 공부';
for (var i = 0; i < 5; i++) {
	message += '!';
}
print(message); // Dart 공부!!!!!

✔ 초기화 식에는 final i = 0; 처럼 상수로 선언할 수 없다.


📁 while
👉 while (조건식) { … }

int count = 1;
//
while (count <= 5) {
	print('count : $count');
	count += 1;
}
/*
count : 1
count : 2
count : 3
count : 4
count : 5
*/

📁 do while
👉 do { … } while (조건식);

int count = 1;
//
do {
  print('count : $count');
  count += 1;
} while (count <= 5);
/*
count : 1
count : 2
count : 3
count : 4
count : 5
*/
int count = 6;
//
do {
  print('count : $count'); // count : 6
  count += 1;
} while (count <= 5);

✔ 우선 do문의 코드 블록을 실행한다.
while 문의 조건식이 참이면 do 문의 코드 블록을 다시 실행하고, 조건식이 거짓이면 do 문을 빠져나온다.


for-in
👉 for (순회식) { … }

List<String> fruits = ['사과', '바나나', '귤'];
//
for (var fruit in fruits) {
  print(fruit);
}
/*
사과
바나나
귤
*/

for 문만 있는 형태의 초기화식에 있는 변수를 사용하지 않으면서 Collection(List, Set, Map)의 요소를 순회할 때 사용한다.

in 이 포함된 for 문의 오른쪽 옆에 있는 변수는 for 문의 코드 블록이 1번 실행되는 동안 값이 바뀌지 않기 때문에 for (final fruit in fruits)상수로 선언해도 된다.


⚡ 키워드

break

int count = 1;
//
while (count <= 6) {
  count += 1;
  if (count == 5) {
    print('count = $count'); // count = 5
    break;
  }
}

✔ 반복문 실행 중에 실행을 멈출 때 사용한다.


📁 continue

final fruits = ['사과', '파인애플', '오렌지', '귤', '복숭아'];
for (final fruit in fruits) {
	if (fruit == '파인애플') {
		continue;
	}
	print('맛있는 $fruit');
}
/*
맛있는 사과
맛있는 오렌지
맛있는 귤
맛있는 복숭아
*/

✔ 반복문 실행 중에 특정 조건인 경우 건너뛰고 싶을 때 사용한다.


✏️ 주석(Comments)

📁 // - 한줄 주석

📁 /**/ - 여러줄 주석

📁 /// - 문서 주석


💬 Dart 심화 문법

🔥 컬렉션(Collections)

✏️ List

✅ 각각의 요소는 모두 같은 타입이어야 한다.

📋 List<[타입]> [변수 이름] = [요소];

List<int> numbers = [1, 2, 3, 4, 5];
List<int> numbers = [];

👉 [변수 이름] = [요소];

var numbers = [1, 2, 3, 4, 5];
final numbers = [1, 2, 3, 4, 5];
const names = ['Alice', 'Bob', 'Henry'];

List 요소에 변동이 없는 경우에는 final 이나 const 로 선언 가능하다.


Index

List<int> numbers = [1, 2, 3, 4, 5];
print(numbers[0]); // 1
var numbers = [1, 2, 3, 4, 5];
print(numbers[3]); // 4
//
numbers[3] = 2;
print(numbers[3]); // 2

Index 의 첫번째 요소는 0부터 시작하며, 음수를 넣을 경우 오류가 난다.
Index를 통해 요소를 바꿀 수 있다.(당연히 상수 선언을 했을 경우는 불가능)


📁 length

var fruits = ['사과', '파인애플', '오렌지'];
print(fruits.length); // 3
print(fruits[fruits.length - 1]); // 오렌지

length를 통해 요소의 개수를 구할 수 있으며, 배열에서 -1 을 잊지 않아야 한다.


📁 isEmpty

var numbers = [];
print(numbers.isEmpty); // true
print(numbers.length); // 0
//
var fruits = ['사과', '파인애플', '오렌지'];
print(fruits.isEmpty); // false

List 에 요소가 없어 비어있는지 확인할 수 있다.


isNotEmpty

var numbers = [];
print(numbers.isNotEmpty); // false
//
var fruits = ['사과', '파인애플', '오렌지'];
print(fruits.isNotEmpty); // true

List 에 요소가 있는지 판별한다.


📁 indexOf()

var fruits = ['사과', '파인애플', '오렌지'];
print(fruits.indexOf('파인애플')); // 1
print(fruits.indexOf('포도')); // -1

✔ 특정 요소의 Index를 알 수 있으며, 없는 요소는 -1 을 반환한다.


📁 add(), addAll()

var fruits = ['사과', '파인애플', '오렌지'];
fruits.add('복숭아');
print(fruits[3]); // 복숭아
//
fruits.addAll(['포도', '귤']);
print(fruits); // [사과, 파인애플, 오렌지, 복숭아, 포도, 귤]
//
final additionalFruits = ['샤인머스켓', '수박'];
fruits.addAll(additionalFruits);
print(fruits); // [사과, 파인애플, 오렌지, 복숭아, 포도, 귤, 샤인머스켓, 수박]

add() 는 요소를 하나 추가할 수 있으며, addAll() 은 여러개를 추가할 때 사용한다.
✔ 배열을 만들어 다른 배열에 추가할 수도 있다.


📁 remove(), removeAt()

var fruits = ['사과', '파인애플', '오렌지'];
fruits.remove('파인애플');
print(fruits); // [사과, 오렌지]
//
var appleIndex = fruits.indexOf('사과');
fruits.removeAt(appleIndex);
print(fruits); // [오렌지]

remove() 는 삭제할 요소를 () 에 넣고, removerAt() 은 삭제할 요소의 Index를 넣는다.


📁 clear()

var fruits = ['사과', '파인애플', '오렌지'];
fruits.clear();
print(fruits); // []
print(fruits.isEmpty); // true
print(fruits.isNotEmpty); // false

✔ 배열 안에 있는 모든 요소를 없앤다.


✏️ Set

✅ 각각의 요소는 모두 같은 타입이어야 한다.

📋 Set<타입> [변수 이름] = {요소};

Set<int> numbers = {1, 2, 3, 4, 5};
Set<int> numbers = {};

👉 변수 이름 = {요소};

var numbers = {1, 2, 3, 4, 5};
final numbers = {1, 2, 3, 4, 5};
const names = {'Alice', 'Bob', 'Henry'};
var names = <String>{};

List 와 동일하게 요소에 변동이 없는 경우, final 이나 const 로 선언 가능하다.

❗ List 처럼 var numbers = {}; 형태로 선언하면 numbers는 Map 타입이 된다.


var fruits = {'사과', '파인애플', '오렌지'};
print(fruits[2]); // Error: The operator '[]' isn't defined for the class 'Set<String>'.

❌ 요소들의 순서가 없으며, Index 개념이 없어 사용하면 오류가 난다.


var fruits = {'사과', '파인애플', '사과'};
print(fruits); // {사과, 파인애플}

✔ 중복된 값이 있으면 하나를 제외하고는 모두 제외한다.


📁 legth

final fruits = {'사과', '파인애플', '오렌지'};
print(fruits.length); // 3

List 와 동일하게 요소의 개수를 구할 수 있다.


📁 isEmpty

var numbers = <int>{};
print(numbers.isEmpty); // true
print(numbers.length); // 0
//
var fruits = {'사과', '파인애플', '오렌지'};
print(fruits.isEmpty); // false

Set 에 요소가 없어 비어있는지 확인할 수 있다.


isNotEmpty

var numbers = <int>{};
print(numbers.isNotEmpty); // false
//
var fruits = {'사과', '파인애플', '오렌지'};
print(fruits.isNotEmpty); // true

Set 에 요소가 있는지 판별한다.


📁 add(), addAll()

var fruits = {'사과', '파인애플', '오렌지'};
fruits.add('복숭아');
print(fruits); // {사과, 파인애플, 오렌지, 복숭아}
//
fruits.addAll({'포도', '귤'});
print(fruits); // {사과, 파인애플, 오렌지, 복숭아, 포도, 귤}
//
final additionalFruits = {'샤인머스켓', '수박'};
fruits.addAll(additionalFruits);
print(fruits); // {사과, 파인애플, 오렌지, 복숭아, 포도, 귤, 샤인머스켓, 수박}

add() 는 요소를 하나 추가할 수 있으며, addAll() 은 여러개를 추가할 때 사용한다.
✔ 배열을 만들어 다른 배열에 추가할 수도 있다.


📁 remove()

var fruits = {'사과', '파인애플', '오렌지'};
fruits.remove('파인애플');
print(fruits); // {사과, 오렌지}

✔ 요소를 삭제할 수 있다.(Index 가 없기 때문에 removeAt 은 사용할 수 없음❌)


📁 contains(), containsAll()

var fruits = {'사과', '파인애플', '오렌지'};
print(fruits.contains('사과')); // true
print(fruits.contains('포도')); // false
//
print(fruits.containsAll({'사과', '오렌지'})); // true
print(fruits.containsAll({'사과', '귤'})); // false

✔ 특정 요소가 포함되어 있는지 알 수 있다.


✏️ Map

✅ 키와 값들은 각각 타입이 같아야 한다.

📋 Map<key 타입, value 타입> 변수 이름 = {key: value};

Map<String, String> people = {'Alice': 'Teacher', 'Bob': 'Student'};
Map<String, String> people = {};

👉 변수 이름 = {key: value};

var people = {'Alice': 'Teacher', 'Bob': 'Student'};
final people = {'Alice': 'Teacher', 'Bob': 'Student'};
const animals = {'Dog': 3, 'Cat': 5};
var people = {};

키(Key)값(Value) 이 묶인 하나의 쌍으로 이루어진 형태이다.


Map<String, int> people = {'Alice': 25, 'Bob': 30};

✅ 키와 값을 서로 다른 타입으로 구성할 수 있다.

Map<String, int> people = {'Alice': 25, 'Bob': 25, 'Alice': 23};
print(people); // {Alice: 23, Bob: 25}

✅ 키는 중복될 수 없지만, 중복될 수 있다.


📁 length

Map<String, int> people = {'Alice': 25, 'Bob': 30};
print(people.length); // 2

✔ 요소의 개수를 구할 수 있다.


📁 isEmpty

var names = {};
print(names.isEmpty); // true
print(names.length); // 0
//
var people = {'Alice': 25, 'Bob': 30};
print(people.isEmpty); // false

Map 에 요소가 없는지 즉, 비어있는지 판별한다.


isNotEmpty

var names = {};
print(names.isNotEmpty); // false
//
var people = {'Alice': 25, 'Bob': 30};
print(people.isNotEmpty); // true

Map 에 요소가 있는지 판별한다.


📁 [변수 이름][[키 이름]]

Map<String, int> people = {'Alice': 25, 'Bob': 30};
print(people['Alice']); // 25

✔ 값을 검색할 수 있다.
Map 에 없는 키를 넣을 경우 null 을 반환한다.


📁 [변수 이름][[키 이름]] = [값];

Map<String, int> people = {'Alice': 25, 'Bob': 30};
people['Alice'] = 28;
print(people); // {Alice: 28, Bob: 30}
print(people['Alice']); // 28

✔ 키의 값을 수정한다.


📁 [변수 이름][[키 이름]] = [값];

Map<String, int> people = {'Alice': 25, 'Bob': 30};
people['Charlie'] = 35;
print(people); // {Alice: 25, Bob: 30, Charlie: 35}

✔ 새로운 키와 값의 쌍을 추가한다.


📁 remove()

Map<String, int> people = {'Alice': 25, 'Bob': 30};
people.remove('Bob');
print(people); // {Alice: 25}
print(people['Bob']); // null

✔ 요소를 삭제한다.


📁 containsKey()

Map<String, int> people = {'Alice': 25, 'Bob': 30};
print(people.containsKey('Alice')); // true
print(people.containsKey('Paul')); // false

✔ 특정 요소가 있는지 알 수 있다.


📁 keys

Map<String, int> people = {'Alice': 25, 'Bob': 30};
print(people.keys); // (Alice, Bob)

✔ 모든 키들을 알 수 있다.


📁 values

var students = {'Alice': 25, 'Bob': 30};
print(students.values); // (25, 30)
//
var teachers = {'Paul': 35, 'Henry': 37, 'Bella': 35};
print(teachers.values); // (35, 37, 35)

✔ 모든 값을 알 수 있다.


🎓 List vs Set

ListSet
순서 유무OX
Index 유무OX
중복 허용 여부OX

🔥 열거형(Enumerations)

✏️ enum

📋 enum [열거형 이름] {요소}

enum Color { red, green, blue }
enum Animal {
  cat,
  dog,
  tiger,
  elephant
}

enum Color { red, green, blue }
var myFavoriteColor = Color.blue;
print(myFavoriteColor); // Color.blue

✔ 열거형 이름을 통해 열거형에 포함된 값에 접근할 수 있다.


📁 switch

enum Color { red, green, blue }
//
var myFavoriteColor = Color.green;
var result = '내가 제일 좋아하는 색은 ';
//
switch (myFavoriteColor) {
  case Color.red:
    result += '빨간색';
  case Color.green:
    result += '초록색';
  case Color.blue:
    result += '파란색';
}
//
print(result); // 내가 제일 좋아하는 색은 초록색

✔ 열거형에 포함된 값을 각각 다룰 수 있다.


if

enum Color { red, green, blue }
//
var myFavoriteColor = Color.green;
var result = '내가 제일 좋아하는 색은 ';
//
if (myFavoriteColor == Color.red) {
  result += '빨간색';
} else if (myFavoriteColor == Color.green) {
  result += '초록색';
} else if (myFavoriteColor == Color.blue) {
  result += '파란색';
}
//
print(result); // 내가 제일 좋아하는 색은 초록색

if 문도 사용 가능하지만, 열거형은 주로 switch 문을 사용한다.


📁 index

enum Color { red, green, blue }
//
print(Color.red.index); // 0
print(Color.green.index); // 1
print(Color.blue.index); // 2

✔ 열거형에 포함된 값이 몇 번째에 있는지 알 수 있다.


📁 values

enum Color { red, green, blue }
//
var colors = Color.values;
print(colors); // [Color.red, Color.green, Color.blue]
print(colors[1]); // Color.green

✔ 열거형에 포함된 값들을 알 수 있다.


📁 name

enum Color { red, green, blue }
print(Color.red.name); // red

✔ 열거형에 포함된 값의 이름을 알 수 있다.


📌 vs Set

✅ Index 개념이 존재하기 때문에 순서가 있다.

❗ 처음 정의된 상태에서 값 추가 또는 제거가 불가능하다.
❗ 중복된 값을 넣었을 경우 오류가 발생한다.


🌱 오늘은 기초 문법까지 들을 예정이었으나, 과제 내용이 생각보다 복잡하고 어렵고, 강의 분량도 많아서 강의를 타이트하게 들었다.

빠르게 강의를 완강하고 개인 과제를 시작해야될 것 같다. 그리고 여유가 된다면.. 아마 없을테지만 강의에서 어려웠던 부분이 있다면 추가 학습을 진행하면 될 것 같다.

개인 과제는 구상이나 Git 사용이나 코멘트, 주석 같은 것들이 필요하기 때문에 얼마나 걸릴지 가늠이 되지 않는다.

슬쩍 보기로는 과제 내용이 어려워보여서 어떻게 구현을 해야될지 감이 잡히지 않았는데, 오늘 강의를 들어보니 '어 과제에서 이거 활용하는건가..?' 싶은 내용도 있었다. 우선은 기초와 기반 다지기에 집중을 하고 과제 생각은 나중에 해야겠다.


🚀 내일은 심화 문법을 들을 예정이었지만, 오늘 심화 3까지 들었기 때문에, 심화 4와 함수형 프로그래밍을 들을 예정이다.

만약 여유가 된다면 객체 지향 프로그래밍까지 들을 것 같은데 과연 시간이 될지와 초반은 기초여서 강의를 쭉 들을 수 있었지만 후반에는 어려워져서 시간이 걸리지 않을까 걱정이 된다.

profile
💻 [25.05.26~] Flutter 공부중⏳

0개의 댓글