[Riverpod] Riverpod 상태관리
·
Dart/Flutter
Flutter에는 많은 상태관리 패키지들이 존재한다. 그 중 Riverpod에 대해서 알아보자. Riverpod는 Provider의 anagram(철자 바꾸기)이다. Riverpod는 Flutter/Dart의 반응형 캐싱 프래임워크로 선언적 프로그래밍과 반응형 프로그래밍을 사용하여 애플리케이션 로직의 상당 부분을 처리한다. https://riverpod.dev/ko/docs/introduction/getting_started Getting started | Riverpod Try Riverpod online riverpod.dev 설치 공식문서 상 아래와 같은 의존성들을 주입해주어야한다는데, 굳이? 다 필요한가 싶긴하다. 예측일뿐 아직 뭐가 뭔지 모르니 우선 다 설치해주자. flutter pub add ..
[Dart] Dart Docs - Classes(1)
·
Dart
Dart는 Class와 Mixin 기반 상속을 지원하는 객체지향언어다. 모든 객체는 클래스의 인스턴스이고, Null을 제외한 클래스는 모두 Object에서 비롯한다. Mixin 기반 상속이란 말은, 모든 클래스가 하나의 부모 클래스를 가지고 있지만 (최상위 클래스인 Object 제외) 클래스의 바디는 다양한 클래스 계층에서 재사용 될 수 있음을 의미한다. Dart는 extension-methods(확장 메소드)라는 것도 제공하는데, 이는 서브 클래스를 생성하거나, 클래스를 바꾸지 않고 클래스에 기능을 추가하는 방법이다. 아래의 예시로 클래스에 대해 알아보자. import 'dart:math'; class Point { double x; double y; double z = 0; Point(this.x, ..
[Dart] Dart Docs - Generics
·
Dart
다른 언어에도(JAVA, Typescript, ...) 존재하는 제네릭이 Dart에도 존재한다. 일반적인 제네릭의 정의는 아래와 같다. 제네릭은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 방식이다. Why use generics? 제네릭은 자주 타입보장이 필요할 때 사용되지만 코드가 실행가능하도록 많은 이점을 가지고 있다. 제네릭타입을 적절하게 지정하면 코드가 더 잘 생성된다. 제네릭을 사용하여 코드 중복을 줄일 수 있다. 예를들어 객체에 대한 캐시용 인터페이스를 생성해보자. abstract class ObjectCache { Object getByKey(String key); void setByKey(String ke..
[Dart] Dart Docs - Operators
·
Dart
Dart는 아래 표의 연산자들을 지원한다. 설명 연산자 결합법칙 unary postfix expr++ expr-- () [] ?[] . ?. ! None unary prefix -expr !expr ~expr ++expr --expr await expr None multiplicative * / % ~/ Left additive + - Left shift >>> Left bitwise AND & Left bitwise XOR ^ Left bitwise OR | Left relational and type test >= > >= ^= += /= = 논리 연산자 연산자 설명 !expr 뒤따르는 식을 반전합니다 (false -> true, true -> false) || 논리 OR && 논리 AND 비트, 쉬..
[Dart] Dart Docs - Function
·
Dart
Dart는 function이 존재하지만 객체 지향 언어이므로 함수도 Function이라는 타입을 가지는 객체로 존재한다. 기본적으로 아래와 같이 사용할 수 있다. (c/c++과 비슷한 느낌) 반환타입 함수이름(매개변수 ...) { ... 작업 return 반환할 표현식 } 하나의 표현식만을 가지는 함수를 선언할 때 한 줄 코딩도 가능하다. 반환타입 함수명(매개변수 ...) => 매개변수 + 1; Parameter Named Parameter 함수를 정의할 때 매개변수에 이름을 부여하는 것을 Named Parameter라고 한다. Named 매개변수는 required로 표시되지 않는 이상 선택적인 매개변수이다. Named Parameter를 정의하려면 아래와 같이 정의할 수 있다. String func1..
[Dart] Dart Docs - Types (Records, Collections)
·
Dart
Records Record는 이름있는 필드(named fields)를 갖는 불변 객체를 생성하는데 사용된다. 이는 데이터 모델의 생성 및 사용을 단순화하고 가독성을 향상시키는데 도움이 된다. 다른 컬렉션 유형(List, Set, Map...등)과 마찬가지로 여러 개체를 하나의 개체로 묶을 수 있지만 다른 컬렉션 유형과 달리 Record는 크기와 유형이 고정되어있다. Record는 Record라는 클래스가 추상클래스로 존재하지만 사용되지 않으며, 타입 선언에는 괄호 안에 들어간 인수 목록을 런타임에서 갖는 '익명' 타입이다. 또한 필드의 길이, 위치, 이름이 저장되며 코드 값과 레코드 유형은 인수 목록 및 단순화된 함수 유형 매개변수 목록과 유사하게 작성된다. 사용법 positional 필드에 기록된 이름..
[Dart] Dart Docs - Variables
·
Dart
변수 선언 var 키워드를 사용한다면, Dart 역시 Javascript/Typescript와 같이 타입추론을 통해 변수를 선언할 수 있다. 또한, String이라던지 구체적으로 타입을 명시하여 선언할 수도 있다. 만약 객체가 단일 타입으로 제한되지 않는다면, Object 타입으로 명시할 수 도 있다. var name = "Wonil" String name = "WONILLISM" Object name = "WONIL" 변수 타입 그렇다면 어떤 종류의 변수들을 제공하는지 알아보자. Built-in types Numbers (int, double) String (String) Booleans (bool) Records ((value1, value2)) Lists (List, 배열) Sets (Set) Ma..
[Flutter] Design Pattern - MVC & MVP
·
Dart/Flutter
마치 React에서의 관심사 분리와 비슷하게 Flutter에도 관심사 분리를 어떻게 적용시킬지를 정하는 디자인 패턴이 있다. Flutter로 앱 개발을 하게되면 앱의 확장성과 유지보수의 편의성을 고려해 적용하는 여러가지 디자인 패턴이 있다. 개발하기에 앞서 어떤 디자인 패턴이 있는지 알아보자. MVC MVC 패턴은 인터페이스, 데이터 데이터 제어에 사용되는 소프트웨어 디자인 패턴이다. Model, ViewModel, View는 각자의 역할을 한다. 만약, 한 페이지 안에 변수, 함수, 위젯을 한 번에 선언하게 되면 가독성과 효율이 매우 좋지 않으므로, 코드를 작성하고 수정할 때 많은 시간이 소요될 것이다. 이러한 문제를 해결하기위해 각 Model, ViewModel, View로 분리한다면 필요한 부분만을..
WONILLISM
'Dart' 카테고리의 글 목록