Flutter/Dart 14

[Dart] 기본 - Future

Future 비동기 프로그래밍에 사용되는 기능 Future 로 사용하는데 미래에 T 타입의 값이 들어온다. void main(List arguments) async { print(await futureInt()); // await이 없다면 완성된 상태가 아니기 때문에 Future instance가 나온다. } Future futureInt() async { return Future(() { print('완료'); return 3; }); // delay를 통해 실행 한다면 Duration이 지난 후 완료된다. } Completed 상태와 Uncompleted 상태가 있다. 완료되기 전에는 그저 Future Instance 이지만 완료된다면 T타입의 값이 들어온다. 실행 중 에러가 발생한다면 에러를 담고 ..

Flutter/Dart 2023.12.15

[Dart] 기본 - Error Handling

Error try-catch 또는 try-on-catch class SomeError implements Exception { String message; SomeError(this.message); } enum AppError { notParseToInt; Exception get error { switch (this) { case AppError.notParseToInt: return SomeError('int 타입으로 변경할 수 없습니다.'); } } } enum으로 관리한다. 팀원과 생각한 패턴이지만 나쁘지 않은 것 같다. get은 다양한 Error들을 지원하기 위해 Exception 타입을 반환하도록 한다. try { num = int.parse(string); } catch(e) { throw..

Flutter/Dart 2023.12.11

[Dart] 기본 - Enum

Enum enumerated type 또는 enum. 열거형. 값을 나열한 것. constant한 값들을 고정해서 표현하는 것. 고정. 변경이 불가하다. enum Planet { mercury(planetNumber: 1), venus(planetNumber: 2), earth(planetNumber: 3), mars(planetNumber: 4), jupiter(planetNumber: 5), saturn(planetNumber: 6), uranus(planetNumber: 7), neptune(planetNumber: 8); final int planetNumber; String get description { switch (this) { case Planet.mercury: return '온도가 높..

Flutter/Dart 2023.12.08

[Dart] 기본 - HashCode

HashCode A string representation of this object. 오브젝트를 표현하는 문자. 라고 공식문서에서 말하지만 리턴값은 int다. 오브젝트를 표현하는 문자로 해쉬코드를 사용할 수 있다. 하지만 기본적으로 == 연산자는 (identityHashCode)을 통해 확인할 수 있는 완전히 동일한 객체일 때에만 true를 반환하게 되어있다. HashCode와는 관계 없다. identical() 메서드를 이용한다. "진짜" 같은 객체인지 비교한다. Dart Data Class 플러그인을 활용한 기본 == 코드 class SomeObject { final int a, b, c; SomeObject(this.a, this.b, this.c); @override bool operator =..

Flutter/Dart 2023.12.07

[Dart] 기본 - 추상클래스, 인터페이스

다트는 문법상 이상한 부분이 많다. 공식문서조차 틀린다. (class modifier) 믿을 수 없다. 두가지만 용도에 맞게 사용한다. abstract class 추상 클래스. 인스턴스 생성 불가능하다. 상속 가능하다. 확장의 용도로만 사용하자. abstract class BaseTranslator { String mapperTo(int data) { return data.toString(); } } class MoreFeatureTranslator extends BaseTranslator { void moreFeature() {} } abstract interface class 인터페이스. 추상화를 주 목적으로 사용하자. abstract interface class ViewModel { Output t..

Flutter/Dart 2023.12.05

[Dart] 기본 - Object vs dynamic

Object null을 제외한 다트의 모든 타입의 최상위 부모 hashcode String toString() bool operator ==() 이 여기에 구현되어 있다. 관련링크 dynamic 클래스가 아니다! 비슷해보이지만 다르다. dynamic 타입은 Object처럼 모든 객체의 부모이다. 타입의 모든 멤버는 주어진 주소에 승인해서 상호작용할 수 있는 어떤 시그니처로 접근을 하는데 dynamic은 다르다. 예를들어 리시버(인스턴스 , 변수 등)가 어떤 dynamic 타입이 평범한 메서드를 호출한다면 매개변수가 있던 없던, 해당 메서드가 있던 없던 호출을 할 수 있다. 이후 컴파일 타임에서 에러가 있다면 오류를 발생시킨다. 어떤 타입 어노테이션이 주어지지 않는다면 시스템은 해당 타입을 dynamic으..

Flutter/Dart 2023.12.04

[Dart] 기본 - Memory

다트의 GC가 메모리의 주소를 바꿀 수 있기 때문에 앱의 변수가 저장된 실제 메모리의 주소를 볼 수 있는 방법은 없다. 이는 GC 기반의 언어들이 공통점? 관련링크 그렇기 때문에 유추할 수 밖에 없다. 다트의 모든 객체는 힙에 저장된다. (from 공식문서) 기본적으로 Memory의 영역에 따라 Code, Data, Bss, Heap, Stack 으로 나누어 생각한다. Code, Data, BSS는 컴파일 타임에 크기가 결정된다. Heap, Stack은 런타임중에 크기가 계속 변한다. Code : 함수, 조건문, 등 코드를 저장한다. Data : 초기화 된 전역변수를 저장한다. BSS : 초기화 되지 않은 전역변수를 저장한다. Heap : 동적할당되는 것들을 저장된다. (클래스의 인스턴스 등) Stack..

Flutter/Dart 2023.12.02

[Dart] 기본 - Final, Const

Final, Const 두 키워드 모두 변수를 변경할 수 없다. final : 한번만 set 되고 변경할 수 없다. const : 컴파일 시점에 set 되어있어야 한다. var, final 변수들은 스택이나 힙에 저장된다. const 변수들은 컴파일 타임에 다른 곳에 계산되어 저장된다. 이후 변수가 그 곳에 있는 값을 참조한다. 그래서 const로 생성된 같은 값의 인스턴스는 같은 객체이다. 관련링크 class Point { static const _initX = 0; static const _initY = 0; int _x; int _y; int get x => _x; int get y => _y; Point({ int x = _initX, int y = _initY, }) : _x = x, _y = ..

Flutter/Dart 2023.12.01

[Dart] 기본 - Record

Record 다른 언어에서는 튜플. setter가 없어서 불변이다. 통째로 갈아끼우면 참조를 변경할 수 있다. (int, int) record = (1, 2); record = (3, 4); print(record); // (3, 4) Record fields (int, int, {int a, int b}) record = (1, a: 2, b: 3, 4); print(record.$1); // 1 print(record.$2); // 4 print(record); // (1, 4, a: 2, b: 3) {} 로 함수처럼 이름을 가질 수 있다. {} 는 제일 마지막 부분에 넣어야한다.(함수처럼) named field를 제외하고 순서대로 $1부터 간다. named 초기화 시 순서가 상관이 없다. ({int..

Flutter/Dart 2023.11.30