본문 바로가기

dart15

[Dart] Metadata Metadata는 code에 추가 정보를 제공하는 기능입니다. Three Annotations Dart는 3가지 annotation이 제공됩니다. @ 기호로 시작하고, compile-time 상수 혹은 constant constructor가 이어집니다. @Deprecated @deprecated @override class Example{ @Deprecated('Use func2 instead') void func1() { func2(); } void func2() {...} } Custom Metadata 원하는 metadata annotation을 만들어 사용하는 것도 가능합니다. class Todo { final String who; final String what; const Todo(this.w.. 2023. 2. 11.
[Dart] Library Dart의 library는 다른 언어에서는 module, package, crate 등으로 부르는 것입니다. 모듈화와 재사용성을 위해 사용을 합니다. Identifier를 _로 시작하면 library 내에서만 볼 수 있는 private identifier가 됩니다. Importing Library Library를 불러올 때는, URI를 사용하여 import를 할 수 있습니다. 이 때, 특정한 scheme이 제공되는 데, 내장 library의 경우 dart: scheme을 사용하고, pub과 같은 package manager는 package: scheme을 사용합니다. import 'dart:io'; import 'package:test/test.dart'; Specifying a Library Prefi.. 2023. 2. 10.
[Dart] Generator Generator 역시 어제 오늘 등장한 내용은 아닌지라 아마 다들 알고 계실거라 생각합니다. Keyword 역시 다른 언어들과 동일하게 yield를 사용합니다. Generator를 사용하면, 요청될 때마다 현재 데이터를 반환 후 다음 데이터가 요청될 때까지 대기하게 됩니다. 간단하게만 살펴보도록 할게요. Built-In Generator Dart는 2가지 종류의 내장 generator를 제공합니다. Synchronous Generator : Iterable object를 반환합니다. Asynchronous Generator : Stream object를 반환합니다. Iterable syncNaturalsTo(int n) sync* { int k = 0; while (k < n) yield k++; } .. 2023. 2. 10.
[Dart] Asynchronous Dart는 비동기 프로그래밍을 지원합니다. 다른 언어들을 통해 많이들 보셨을 async/await keyword를 사용합니다. async and await 비동기 함수를 작성하려면, async keyword를 함수의 body 앞에 붙여줍니다. 비동기 함수 내에서, 비동기 처리를 하려면 원하는 statement 앞에 await keyword를 붙여줍니다. 즉, await keyword는 async 함수 내에서만 사용할 수 있습니다. 또한, await keyword는 여러 차례 호출할 수 있습니다. 비동기 함수는 주로 Future object를 반환합니다. void asyncFunc() async { await delayedFunction(); } Future asyncFunc() async { await .. 2023. 2. 10.
[Dart] Exception Handling 이번에는 견고한 프로그램을 만들기 위해 필수적인 예외 처리에 대해 다뤄보겠습니다. 역시 이 부분도 다른 언어들과 별다른 차이가 없어 쉽게 아실 것 같네요. Throw 임의로 예외를 발생시킬 때는 throw를 사용합니다. Exception 발생은 expression 이므로, expression이 허용되는 모든 곳에서 예외를 발생시킬 수 있습니다. Exception object 혹은 임의의 object로 예외를 발생시킬 수 있습니다. throw FormatException('Expected at least 1 section'); throw 'Out of range!'; try-catch 예외 처리는 많은 언어에서 사용하는 try-catch를 사용합니다. 발생한 예외를 catching하면, 더 이상의 prop.. 2023. 2. 9.
[Dart] Generics Generic 역시 다른 언어들에서 수없이 봐오셨을 거라 생각합니다. 따라서, Dart에서의 사용에 대해 자주 쓰이는 것들과 함께 예제 위주로 보여드리겠습니다. with Collection Literals List와 Set에 을 붙이면 됩니다. Map에는 을 붙이면 됩니다. 익숙한 형태일테니 예제로 보시면 바로 사용해보실 수 있을거에요. var nums = [1, 2, 3]; var fruits = {'apple', 'banana', 'cherry'}; var persons = {'HoYa': 18, 'Kim': 27, 'Park': 30}; with Constructor 예제로 Set의 from() constructor에 iterable을 사용하여 새로운 Set을 만드는 것을 보여드리겠습니다. var .. 2023. 2. 8.
[Dart] Enumerated Type 이번에는 개발 시 자주 사용되는 enum type에 대해 포스팅을 해보겠습니다. Enum Type 모든 enum은 Enum class를 확장합니다. 다른 말로 상속합니다. enum keyword를 사용하여 정의를 하며, 원하는 값을 나열하면 됩니다. enum Color { red, green, blue } final favoriteColor = Color.blue; if (favoriteColor == Color.blue) { print('Your favorite color is blue !'); } 사용은 마치 class variable을 사용하듯이 하실 수 있습니다. getter enum의 모든 값들은 index라는 getter를 갖고 있습니다. 이는 0부터 시작하는 값입니다. print(Color... 2023. 2. 8.
[Dart] Classes Dart는 class와 mixin 기반의 상속을 지원하는 OOP 언어입니다. 따라서, 이번 포스팅에서 소개드릴 class 관련 내용이 핵심이라고도 볼 수 있습니다. 용어가 조금 혼용되는 느낌이 있는 것 말곤 타 언어대비 특별할 건 딱히 없어서 편하게 보실 수 있을거에요. Dart에서 Null을 제외한 모든 object는 Object로부터 상속됩니다. Constructors 생성자는 Class 이름과 동일하게 만들거나, named constructor로 만들 수 있습니다. 아무런 생성자도 정의하지 않는다면, parameter를 받지않는 default constructor가 자동으로 제공됩니다. 생성자는 상속되지 않습니다. Instance의 생성 시, new keyword는 생략이 가능합니다. 간단한 예제와.. 2023. 2. 8.
[Dart] Functions 이번 포스팅에서는 Dart의 함수에 대해 살펴보겠습니다. 이미 다른 언어들을 통해 다 아는 내용일테니 Dart에서의 문법 사항 정도만 눈여겨 보시면 될 거 같아요. Fundamentals Dart는 OOP 언어 입니다. 함수또한 object이며 first-class object이고, Function type을 갖습니다. main() 함수는 프로그램의 entry point로 없어서는 안됩니다. 다른 언어들과 마찬가지로 return type과 parameters를 갖습니다. 명시적인 return type이 없고 return value가 없다면, null이 return 됩니다. void sayHello(String name) { print("Hello, $name"); } void main() { sayHel.. 2023. 2. 3.
[Dart] Control Flow Statements 이번에는 Dart의 제어문에 대해 살펴보겠습니다. 다른 언어들과 완전히 똑같다고 보셔도 될 거 같아요. Conditional Statements 먼저, 조건문부터 보겠습니다. 조건문에는 if-else문과 switch-case문이 있습니다. if-else 다른 언어들과 동일하므로, 문법만 보여드릴게요. var score = 88; String grade; if (score > 90) { grade = 'A'; } else if (score > 80) { grade = 'B'; } else if (score > 70) { grade = 'C'; } else { grade = 'D'; } switch-case 기본적으로 다른 언어와 동일합니다. var trafficLight = 'Red'; switch (tr.. 2023. 2. 3.
[Dart] Operators 이번 포스팅에서는 Dart의 연산자에 대해 살펴보겠습니다. 타 언어대비 크게 특이한 것들은 없고 대동소이하므로 적당히 살펴보시기만 해도 충분할 것 같습니다. Arithmetic Operators 기본적으로 사칙연산(+, _, *, /)과 modulo(%) 연산이 있고, 음수 부호(-)가 있습니다. 나눗셈(/)과 달리 정수 나눗셈(~/) 연산은 결과가 정수형으로 반환됩니다. print(5 / 2); // 2.5 print(5 ~/ 2); // 2 전위 증감(++var, --var)과 후위 증감(var++, var--) 연산자도 있습니다. Equality and Relational Operators 비교 연산자(==, !=, >, >=, >=, &=, |=, ^=, ??= Logical Operators 논.. 2023. 2. 2.
[Dart] Data Types 이번에는 Dart의 자료형에 대해 살펴보겠습니다. 역시나 다른 언어의 경험이 있으시다면 보기만 하셔도 쉽게 아실 수 있을거에요. Dart는 type이 중요한 강타입 언어로 python등의 언어와 달리 type을 섞어서 사용할 수 없습니다. 다시 말해, 정수형으로 선언된 변수에 문자열을 할당할 수 없고, 정수형 리스트에 문자열을 요소로 넣을 수 없습니다. Built-in Types Dart의 모든 것은 object 입니다. 각 자료형 역시 class로 되어 있어 생성자를 사용하거나 literal 형태로 선언을 할 수 있어요. 먼저, 내장 자료형들 부터 살펴보겠습니다. Numbers - int 정수 타입으로 platform에 따라 다를 수 있지만, 최대 64bits의 정수를 표현할 수 있습니다. - doub.. 2023. 2. 1.