[TIL] Dart 특징 및 변수 실습

Jul 30, 2024
[TIL] Dart 특징 및 변수 실습

Dart Naming Convention

  1. lowerCamelCase: camelCase
    1. variables, parameters, function name
  1. UpperCamelCase: PascalCase
    1. classes, enum types
  1. lowercase_with_underscores: snake_case
    1. files, directories, packages

Console

입출력 장치
터미널과 혼용되는 용어
상태 및 오류가 보고되는 것

Comments

// 한 줄 주석
// TODO 주석: TODO 창을 통해 TODO 주석만 확인 가능
/// 문서 주석
함수 및 클래스의 의미를 작성하여 문서화하는 것
DartDoc로 문서 주석 문서화 가능

Dart의 특징

  1. Hot Reload
    1. Compiler
      Interpreter
      개발 속도
      느림
      빠름
      실행 속도
      빠름
      느림
      개발하는 동안은 JIT(Just-In-Time) 동작 배포할 때는 AOT(Ahead-Of-Time)
      JIT: 실시간으로 변경된 코드 확인 가능
      AOT: 실행 전 컴파일을 하여 속도가 빠름
  1. Static Type Checking
    1. Type을 정확히 명시해야 함
      Type을 지정하지 않을 수는 있지만 기본적으로 강력한 타입 체크 시스템을 제공함
  1. Null Safety
    1. 모든 변수를 null이 아닌 값으로 간주함
      값이 null인 상황을 배제하기에 시스템이 안정적이지만 코드를 작성하기 어려움
  1. Single Thread
    1. Multi Thread를 사용하면 속도는 빨라지지만 잘 조율해서 사용하기 어려움
      Thread를 늘려서 사용할 수는 있다

Dart Project 구성

  1. Flutter Project와 Dart Project는 다르다
    1. Dart Project = 언어만 활용 가능한 프로젝트
  1. root = 최상위 경로, 절대 경로
    1. Context(문맥) 잘 파악할 것 > 현재 위치가 어딘지 정확히 인지할 것
      기호
      의미
      /
      root
      ./
      현재 위치
      ../
      상위 경로
  1. Dart Project 구조
    1. 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 차이
  1. final 키워드는 런타임에 변수 할당하지만 const 키워드는 컴파일 타임에 변수 선언이 이루어진다
    1. final finalTime = DateTime.now(); print(finalTime); // 런타임 시 확인 가능한 DateTime.now()는 final 사용 가능 const constTime = DateTime.now(); print(constTime); // ERROR: const는 런타임이 아닌 컴파일 타임에 결정되므로 사용 불가
  1. final은 값이 object인 경우 field 변경 가능하지만 const는 불가하다
    1. 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입니다.'); }

마치며

  1. 타입 선언을 굳이 따로 하지 말자
    1. String lastName; String firstName; lastName = stdin.readLineSync()!; firstName = stdin.readLineSync()!; // 수정 String lastName = stdin.readLineSync()!; String firstName = stdin.readLineSync()!;
  1. \n = 줄바꿈 \t = 들여쓰기
    1. print('줄 바꾸고 들여쓰기 두 번\n\t\t');
  1. int, double로 변환하려면 .parse를 사용하자
    1. String firstNumber = stdin.readLineSync()!; String secondNumber = stdin.readLineSync()!; int sum = int.parse(firstNumber) + int.parse(secondNumber); stdout.write('합: $sum');
Share article

1hyoeun3