영등포 새싹캠퍼스에서의 flutter 첫 시간에 dart 문법을 배우게 되었습니다.
우선 저는 flutter 코드를 한 두번씩 쳐보면서 무언가를 만들려는 시도를 해보았기에 이번 시간에 배운 변수, 상수들이나 if, for문에 대해 한번 정리하고 넘어가고자 합니다.
dart문법 공식 문서 : https://dart.dev/language
dart문법 - Variables : https://dart.dev/language/variables
Dart에는 기본 타입[ int, double, String, bool ]과 타입 추론의 var와 dynamic이 있습니다.
기본 타입은 다른 언어들과 같이 순서대로 정수형, 실수형, 문자열, 참 또는 거짓(불리언)을 나타냅니다. 하지만, var와 dynamic은 타입을 직접 명시하지 않아도, 타입을 추론하는 기능이 내장되어 있습니다.
var는 초기 값으로 타입이 결정되는 반면, dynamic은 var과는 달리 값을 자유자재로 대입이 가능한 변수처럼 만듭니다. 저는 dynamic은 타입을 추론한다기 보다는 어떤 타입이든 변경이 가능하다로 받아들였습니다.
이러한 타입들 외에도 배열을 나타내는 List타입과 json구조를 나타내는 Map타입 등을 사용할 수 있습니다.
우선 final과 const의 차이점에 알기 전에 둘에 대해 짚고 넘어가고자 합니다.
final과 const는 상수로, 한 번 값을 대입하면 변경할 수 없다는 공통점을 가지고 있습니다. 둘 다 똑같은 상수인데, 왜 두 개나 있을까요?
그 이유는 final은 런타임(run-time)상수이고, const는 컴파일타임(compile-time)상수이기 때문입니다.
final 변수는 초기화되는 시점은 앱이 실행될 때이고, 한 번 초기화하면 그 후로는 절대 변하지 않습니다. 하지만, const는 컴파일 시에 상수가 되고, 이는 변수가 선언과 동시에 초기화된다는 의미를 뜻합니다. (const가 가장 먼저 메모리를 차지하고, final은 실행하고 메모리를 차지한다)
그 때문에 프로그램을 실행할 때 시간에 대한 로그를 남기고 싶을 때, DateTime.now()을 사용하는데, final은 실행 시에 시간이 결정되므로 사용할 수 있습니다. 하지만, const는 컴파일 시의 시간을 담을 수 없어 DateTime.now()를 사용할 수 없습니다.
null safety는 Flutter 2.0과 Dart 2.12부터 지원된 하나의 기능입니다.
null에게서 안전한 프로그램 코드를 작성하는 것을 의미하는 null safety는 컴파일러에서 코드를 실행하기 전에 버그를 찾아내 수정할 수 있습니다. 또한, null safety는 null을 제거하는 것이 목표가 아닙니다.
null safety는 Nullable과 Non-nullable 개념을 도입해 예기치 않은 예외 발생 상황을 방지하여 코드 안정성과 신뢰성을 향상시키고, 개발자가 코드를 더욱 명확하게 작성할 수 있도록 하였습니다.
안드로이드 스튜디오에서는 둘다 멀쩡하게 나오네요.. 대체 왜..
Nullable과 Non-nullable 개념은 Dart의 null safety에서 변수의 null 가능성을 명확하게 표현하는데 사용합니다. 이를 통해 코드의 안정성가 가독성을 향상시키고, null 참조로 인한 예외를 방지할 수 있습니다.
이외에도 late라는 null safety와 관련 있는 연산자가 있습니다.
late 연산자는 변수를 선언할 때 초기값을 바로 할당하지 않을 때 사용됩니다. late를 사용하면 변수는 Non-nullable로 선언되지만, 선언 후 나중에 초기값을 할당할 수 있습니다.
late 연산자는 null safety와 관련이 있지만, late 자체는 null safety와 독립적으로 동작합니다. 즉, late 변수는 null 가능성과 관련이 없지만, null safety 기능을 사용하면서 초기값이 없는 변수를 처리하는데 유용하게 사용될 수 있습니다.
YouTube Flutter - Why null safety?
위 nullable 사진에서 사용한 tools : https://dart.dev/codelabs/dart-cheatsheet#nullable-variables
() 소괄호 안에 조건을 넣고 {} 중괄호에 해당 조건일 때의 결과 코드를 작성합니다.
else if도 위와 같습니다. 그외에도 모든 조건이 아닐 때 해당하는 else문은 조건문을 적지 않고, {} 중괄호에 결과 코드만 작성합니다.
() 소괄호 안에 조건을 넣고 {} 중괄호에 해당 조건일 때의 결과 코드를 작성합니다.
해당 조건이 만족되면 루프를 반복합니다.
dart에서는 String엔 ‘’(작은 따옴표)가 default이다.
라고 선생님께서 말씀하셨는데 어디다가 넣어야할지 모르다가 그냥 후기에다가 넣어버린...
읽어주셔서 감사합니다!
참고 블로그_1 : https://needjarvis.tistory.com/787
참고 블로그_2 : https://velog.io/@ruinak_4127/Dart-final과-const의-차이
참고 블로그_3 : https://medium.com/flutter-korea/flutter의-null-safety-이해하기