Dart Naming Convention
- lowerCamelCase: camelCase
variables, parameters, function name
- UpperCamelCase: PascalCase
classes, enum types
- lowercase_with_underscores: snake_case
files, directories, packages
Console
입출력 장치
터미널과 혼용되는 용어
상태 및 오류가 보고되는 것
Comments
// 한 줄 주석
// TODO 주석: TODO 창을 통해 TODO 주석만 확인 가능
/// 문서 주석
함수 및 클래스의 의미를 작성하여 문서화하는 것
DartDoc로 문서 주석 문서화 가능
Dart의 특징
- Hot Reload
ㅤ | Compiler | Interpreter |
개발 속도 | 느림 | 빠름 |
실행 속도 | 빠름 | 느림 |
개발하는 동안은 JIT(Just-In-Time) 동작 배포할 때는 AOT(Ahead-Of-Time)
JIT: 실시간으로 변경된 코드 확인 가능
AOT: 실행 전 컴파일을 하여 속도가 빠름
- Static Type Checking
Type을 정확히 명시해야 함
Type을 지정하지 않을 수는 있지만 기본적으로 강력한 타입 체크 시스템을 제공함
- Null Safety
모든 변수를 null이 아닌 값으로 간주함
값이 null인 상황을 배제하기에 시스템이 안정적이지만 코드를 작성하기 어려움
- Single Thread
Multi Thread를 사용하면 속도는 빨라지지만 잘 조율해서 사용하기 어려움
Thread를 늘려서 사용할 수는 있다
Dart Project 구성
- Flutter Project와 Dart Project는 다르다
Dart Project = 언어만 활용 가능한 프로젝트
- root = 최상위 경로, 절대 경로
Context(문맥) 잘 파악할 것 > 현재 위치가 어딘지 정확히 인지할 것
기호 | 의미 |
/ | root |
./ | 현재 위치 |
../ | 상위 경로 |
- Dart Project 구조
bin 폴더의 dart 파일 가장 먼저 실행(시작점)
bin이란? 실행 파일 모아두는 폴더
dart 파일 안의 main 함수 = 시작함수
lib 폴더 안의 dart 파일 호출 후 동작(작업 파일)
Flutter Project는 lib 폴더 안의 dart 파일이 시작점
pubspec.yaml = 패키지 관리 파일
Dart Variables 실습
변수가 null이 아님을 보장하는 ! 키워드
print(name!); // 변수 name에는 null값 할당 불가
! 키워드 내용을 놓쳐서 팩토리얼로 착각했지만 non-nullable 하게 만들어 주는 것이었다!
추후에 변수 초기화를 하고 싶다면 late 키워드 사용
late int number;
void main() {
number = 1;
print(number);
}
변수 재할당이 불가한 final과 const
final name = 'Hyoeun' // type 없이 선언 가능
final String nickname = '1hyoeun3';
name = 'Hyoeun Lee'; // ERROR: final 변수 재할당 불가
const number = 1;
number = 22; // ERROR: const 변수 재할당 불가
final과 const 차이
- final 키워드는 런타임에 변수 할당하지만 const 키워드는 컴파일 타임에 변수 선언이 이루어진다
final finalTime = DateTime.now();
print(finalTime); // 런타임 시 확인 가능한 DateTime.now()는 final 사용 가능
const constTime = DateTime.now();
print(constTime); // ERROR: const는 런타임이 아닌 컴파일 타임에 결정되므로 사용 불가
- final은 값이 object인 경우 field 변경 가능하지만 const는 불가하다
final finalList = [1, 2, 3];
finalList[2] = 1; // [1, 1, 3]
const constList = [1, 2, 3];
constList[2] = 1; // ERROR: const 변수는 필드 변경 불가
field = class에 포함된 변수
String interpolation
String school = '동덕여자대학교';
String selfIntroduction = '저는 $school에 재학 중입니다.';
console input
import ‘dart:io’; // 입출력 관련 라이브러리
void main(List<String> arguments) {
String name;
stdout.write('이름을 입력하세요: '); // print 대신 stdout.write 사용 가능
name = stdin.readListSync()!'; // 입력을 받기 위해 stdin.readLineSync() 사용 및 null값 허용하지 않고자 ! 키워드 사용
print('당신의 이름은 $name입니다.');
}
마치며
- 타입 선언을 굳이 따로 하지 말자
String lastName;
String firstName;
lastName = stdin.readLineSync()!;
firstName = stdin.readLineSync()!;
// 수정
String lastName = stdin.readLineSync()!;
String firstName = stdin.readLineSync()!;
- \n = 줄바꿈 \t = 들여쓰기
print('줄 바꾸고 들여쓰기 두 번\n\t\t');
- int, double로 변환하려면 .parse를 사용하자
String firstNumber = stdin.readLineSync()!;
String secondNumber = stdin.readLineSync()!;
int sum = int.parse(firstNumber) + int.parse(secondNumber);
stdout.write('합: $sum');
Share article