본문 바로가기
반응형

Dart14

[Dart] non nullable 변수의 초기화 시기 https://dart.dev/null-safety/understanding-null-safety Understanding null safety A deep dive into Dart language and library changes related to null safety. dart.dev 공식문서 null safety의 이해에서 발췌, Uninitialized variables항목 참고 1. 개요 Dart의 non nullable 변수는 사용전에 반드시 초기화 해 주어야 한다. 그런데 코드를 작성하다보면 사용전에만 초기화 하면 될 줄 알았는데 어떤 경우에는 선언과 동시에 초기화를 해야하는 경우가 있다. 어떨때는 나중에 초기화해도 되고, 어떨때는 반드시 선언과 동시에 초기화 해야하는데 이 문서는 이를.. 2022. 6. 10.
[Dart] late변수 사용 시기, nullable변수와의 차이 https://dart.dev/null-safety/understanding-null-safety#smarter-null-aware-methods Understanding null safety A deep dive into Dart language and library changes related to null safety. dart.dev 해당 블로그 내용은 null safety에 대한 이해에서 발췌 해 왔음 1. 개요 다트에서는 late변수를 제공한다. late변수를 사용하면 non-nullable변수의 초기화를 나중에 할 수 있다. 헌데 한가지 의문점이 있다. 변수의 자료형을 nullable로 선언해도 나중에 초기화를 할 수 있으니 그냥 nullable을 쓰면 되지 왜 굳이 구글은 late라는 키워.. 2022. 6. 9.
[Dart] Type Promotion이란 1. Type Promotion이란? Dart의 flow Analysis는 nullability까지 분석한다. 여기서 만약 Dart의 코드분석이 nullable변수인데 절대 null값을 가질 수 없는 변수를 발견한다면, Dart는 이 nullable변수를 non-nullable로 취급한다. 2. 예제 Definite Assignment 다트의 코드분석은 변수가 언제 선언되고,어디서 읽히는지 까지 추적한다. 그리고 non-nullalble변수가 사용되기전에 값을 할당 받았는지 까지 추적이 가능하다. 이러한 추적 과정을 Definite Assignment라고 한다. 아래의 케이스에서는 text가 사용되기전에 값을 할당받지 못했다. 고로 Dart에서는 이를 추적하여 error를 일으켜 개발자에게 알려준다. v.. 2022. 6. 8.
[Dart] Isolate 배우기 https://medium.com/dartlang/dart-asynchronous-programming-isolates-and-event-loops-bffc3e296a6a Dart asynchronous programming: Isolates and event loops Dart, despite being a single-threaded language, offers support for futures, streams, background work, and all the other things you need to… medium.com 상기 내용을 기반으로 합니다. Isolate Dart는 싱글스레드 언어이다. 하지만 다른언어의 쓰레드 프로그래밍처럼 비동기 프로그래밍을 지원한다. 그게 바로 Isolate.. 2021. 10. 18.
[Dart] Generator 제너레이터 Generator란? 연속적인 값들의 모음을 만들어주는 함수이다. sync한 데이터와 async한 데이터를 만들어줄때 방법이 다르다 Synchronous generator: Iterable 객체를 리턴해야 한다 Asynchronous generator: Stream 객체를 리턴해야 한다 아래는 sync한 버전의 예시이다. 0부터 n까지의 연속적인 숫자의 데이터들을 만들어 return해 준다 sync 제너레이터를 만드려면 function body 앞에 sync* 를 붙여주고 yield 키워드를 이용해 데이터를 생성해나간다 Iterable naturalsTo(int n) sync* { int k = 0; while (k < n) yield k++; } async 제너레이터는 async* 를 함수 구현체 앞에.. 2021. 10. 15.
[Dart] Future, Stream, Async function Async Function async function은 비동기 함수이다. 말 그대로 함수의 작업이 끝나지 않아도 다음코드를 진행해 버린다. async function은 함수 리턴값으로 Future 클래스를 리턴한다. 이 Future클래스로 함수가 끝난 결과값을 처리할 수 있다. 아래 일반적은 sync function이 있다고 하자 String lookUpVersion() => '1.0.0'; 이를 async로 바꾸면 아래처럼 함수에 async 키워드를 붙이고 Future클래스를 리턴해주면 된다 Future lookUpVersion() async => '1.0.0'; 위 함수는 String값을 리턴하기에 Future 이 되었다. 만약 값을 리턴하지 않으면 Future 라고 적어주면 된다. Future 클래.. 2021. 10. 15.
[Dart] 익명함수(Anonymous function), 람다함수(lamda) Anonymous function 다트에서 이름이 없는 함수를 익명함수, 람다, 또는 클로저(closure)라고 부른다. 형태는 다음과 같다 (파라미터) { //함수 구현부 } 아래는 for each문을 사용한 대표적인 예제이다. const list = ['apples', 'bananas', 'oranges']; list.forEach((item) { print('${list.indexOf(item)}: $item'); }); 만약 익명함수가 한줄이거나 return문 한줄일 경우 중괄호를 화살표로 바꿔줄 수 있다. (파라미터) => 한줄짜리 함수문장; list.forEach((item) => print('${list.indexOf(item)}: $item')); 2021. 10. 15.
[Dart] deferred as 로 라이브러리 나중에 로딩하기 Lazily loading a library Dart에서는 Deferred as로 라이브러리를 필요한 시점에서 로딩 할 수 있다. 자주 안쓰이는 라이브러리를 늦게 로딩하면 라이브러리를 안 쓸 때 퍼포먼스를 향상 시킬 수 있다는 장점이 있다! 사용법 먼저 라이브러리를 deferred as 키워드를 붙여 import 한다 import 'package:greetings/hello.dart' deferred as hello; 라이브러리를 사용하지 전에 loadLibrary() 메소드를 호출한다. Future greet() async { await hello.loadLibrary(); hello.printGreeting(); } loadLibrary() 메소드는 여러번 호출 가능하나 라이브러리 로드는 딱 한번만 .. 2021. 10. 15.
[Dart] var과 dynamic var 과 dynamic var은 타입추론이 가능합니다. 허나 한번 타입추론을 수행하면 이후 타입변경이 불가능 합니다. var a= 123; //a = "456"; // error! dynamic은 var과 같이 타입추론이 가능한 변수입니다. 타입이 정해져도 이후 타입변경이 가능합니다. dynamic a = 123 a = "456"; // OK 2021. 10. 15.
[Dart] mixin 클래스 Mixin 클래스란? 클래스코드를 다중상속을 통하여 재활용 할 수 있도록 만든 기능이다. Mixin 생성 및 사용법 재사용될 클래스 코드는 생성자를 정의하면 안된다 mixin으로 사용될 클래스의 생성을 원하지 않을경우 mixin 키워드를 사용한다 mixin 클래스는 with 키워드로 상속해준다. class Person{ int age; String name; Person(this.age, this.name); } class Singer{ String? song; } mixin Dancer{ String? dance; } class Idol extends Person with Singer, Dancer { Idol(int age,String name,[String? song, String? dance]):.. 2021. 10. 15.
[Dart] Dart 클래스 배우기 https://dart.dev/guides/language/language-tour A tour of the Dart language A tour of all the major Dart language features. dart.dev 해당페이지 내용을 기반으로 합니다. 다른언어와 겹치는 내용은 제외하였습니다. Dart의 클래스 Dart의 클래스는 최상위 클래스로 Object 클래스를 상속한다 Dart는 Mixin-based inheritance를 지원한다. mixin 이 뭔말인지 몰라서 찾아봤는데 아래와 같이 정의되어있다 Mixin-ased inheritance means that although every class (except for the top class, Object?) has exactly.. 2021. 10. 14.
[Dart] Dart 배우기 https://dart.dev/guides/language/language-tour A tour of the Dart language A tour of all the major Dart language features. dart.dev 해당문서는 위 공식페이지 내용을 번역하였습니다. Dart의 주요 컨셉 Dart의 모든 variable은 객체(Object) 입니다. 심지어 숫자, 함수 그리고 null까지 객체입니다. 모든 객체들은 자바와 같이 Object 클래스를 상속받습니다(null클래스 제외). Dart의 클래스들은 모드 인터페이스로 사용될 수 있습니다. Dart는 타입을 명시해주어야 하는 언어이지만 Dart는 타입 추론이 가능합니다. number라는 type은 대표적으로 숫자를 추론할 수 있는 자료.. 2021. 10. 13.
[Dart] 리스트이어 붙이기. spread operator ... 다트에는 spread operator(점점점, ...)라는 기능을 제공한다. 사용방법은 아래와 같다 var list = [...] void main() { var mylist = [1,2,3]; var mylist2 = [10, ...mylist]; var mylist3 = [10,mylist]; print(mylist); print(mylist2); print(mylist3); } 결과: [1, 2, 3] [10, 1, 2, 3] [10, [1, 2, 3]] 만약 이어붙이는 리스트가 널 가능성이 있으면 끝에다가 물음표를 붙여주면 된다. ...?list 이렇게 2021. 7. 26.
Dart의 선택적 매개변수 뭐하는거임? 자바에서 생성자를 만들때 여러개 만들던 기억이 남? Class ABC{ int A; int B; int C; ABC(int a){ this.A =a; } ABC(int a,int b){ this.A = a; this.B = b; } ABC(int a,int b,int c){ this.A = a; this.B = b; this.C = c; } } 저 망할 오버로딩 반복하는 작업을 줄이기 위해 만든거임 아래는 dart 코드로 만들어진 생성자 Class ABC({this.A = 0, this.B = 0, this.C = 0}); 사용법은 아래와 같다 생성자({ this.변수 = 초기값, this.변수 = 초기값, .....}) 그럼 아래와 같이 객체생성이 가능하다 ABC({A: 10}); ABC(.. 2021. 7. 20.
반응형