변수 = 데이터를 담는 상자
final: 실행 중에 값이 결정될 수 있지만, 한 번 대입 후 변경 불가
const: 컴파일 시점부터 확정된 진짜 상수 (원주율 같은 값)
const pi = 3.14159;
late: 나중에 반드시 값이 들어갈 non-null 변수
late String description;
description = '설명입니다.';
기본 타입: int, double, num, String, bool
Dart는 null-safe라서, 기본적으로는 null 허용 X
null을 허용하려면 ? 붙이기
int? a = null;
+, -, *, /, ~/, %
int a = 12;
int b = 5;
print(a ~/ b); // 몫: 2
print(a % b); // 나머지: 2
/ → 실수 나눗셈, ~/ → 정수 몫
==, !=, >, <, >=, <=
결과는 항상 bool
→ 나중에 if, while 같은 조건식에서 많이 쓰일 예정
as : 형변환 (안 맞으면 TypeError 위험)
is : 이 타입 맞냐?
is!: 이 타입 아니냐?
int? a = 2;
print(a is int); // true
print(a is! int); // false
기본: =
null일 때만 대입: ??=
복합:
+=, -=, *=, /=, ~/=, %=
int x = 5;
x += 3; // 8
x %= 4; // 0
! : 반전 (NOT)
|| : 둘 중 하나라도 true면 true (OR)
&& : 둘 다 true일 때만 true (AND)
파일의 변경 이력을 스냅샷처럼 계속 쌓아 가는 시스템
혼자 쓸 때:
버전 되돌리기, 실수 복구
같이 쓸 때:
브랜치/머지로 정리 가능
git init – 이 폴더를 git으로 관리 시작
git status – 지금 상태 확인
git add – 추가
git commit – 변경내용 저장?
git push – 원격 저장소로 올리기
git pull – 원격 변경사항 가져오기
파일 수정 → add → commit → (필요하면) push
이 흐름이 몸에 배어야 한다는 걸 계속 강조함.
git clone으로 원격 저장소 가져오기
브랜치 전략:
main : 배포용 / 안정 버전
dev : 개발용 / 새 기능 작업용
새 브랜치에서 작업:
git checkout -b dev origin/dev
작업 → git add → git commit → git push
작업 끝나면 GitHub에서 Pull Request(PR):
“내가 dev에서 이런 작업했으니 main에 합쳐 주세요”라고 요청
리뷰 → 문제 없으면 Merge
협업할 때 꿀팁:
작업 시작 전에 항상 git pull로 최신화
내가 지금 어느 브랜치에 있는지 항상 확인
충돌(Conflict) 줄이려면 자주 Commit, 자주 Pull
개인 과제 찍먹
강의고 뭐고, 그냥 맞으면서 배우는 게 더 빠르고 효율적일 것 같다.