Flutter - 화페 & 숫자
·
Flutter
decimal 패키지 import 'package:decimal/decimal.dart'; import 'package:decimal/intl.dart'; final d = Decimal.parse('12345.12345'); print(NumberFormat.decimalPattern('ko_KR').format(DecimalIntl(d))); // 12,345.123 print(NumberFormat.decimalPattern('en_US').format(DecimalIntl(d))); // 12,345.123 Decimal.parse() 정적 메소드로 문자열을 십진수 객체로 얻는다. ko_KR, en_US 로케일 출력 모두 기본 설정은 세자리 수마다 콤마, 소숫점 셋째 자리까지 표시이다. decim..
Flutter - 날짜 & 시간
·
Flutter
시나리오 백엔드의 데이터베이스에는 UTC 기준시로 날짜시각을 저장한다. 백엔드와 프론트엔드는 ISO-8601 표준 날짜시각 형식 문자열로 주고 받는다. UTC 기준 마이크로초를 제거한 ISO-8601 표준 형식 예시는 2022-06-24T10:37:34+00:00와 같다. 백엔드에서 생성한 날짜시각 객체는 이력, 로그와 관련된 경우가 많으므로 프론트엔드에서는 출력만 가능할 뿐 변경할 수 없다. 프론트엔드에서 생성한 날짜시각 객체는 사용자의 일정과 관련된 경우가 많으므로 백엔드에 저장 시 폼 검증이 상대적으로 느슨하다. 백엔드에서 날짜시각 문자열을 받아 출력해야 하는 경우 UTC 기준 ISO-8601 문자열을 객체로 만든다. DateTime.parse() final utc = DateTime.parse('..
Flutter - WebScoket
·
Flutter
1. 패키지 추가 웹소켓 관련 패키지를 사용하기 위해 pubspec.yaml의 dependencies 항목을 다음과 같이 수정한다. dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.2 web_socket_channel: ^1.0.13 2. 라이브러리 import 웹소켓 관련 패키지를 사용하기 위해 다음과 같이 라이브러리들을 import 한다. import 'package:flutter/material.dart'; import 'pa..
Flutter - JWT
·
Flutter
요청에 의한 접근 권한 체크 이전 글에서 앱에서 로그인 상태 유지를 위한 방법으로 FlutterSecureStorage를 사용하였다. 이 방법은 로그인 상태를 유지한 것이지 클라이언트가 서버에 특정 정보를 요청할 때 적절한 권한을 가진 클라이언트가 요청한 요청인지에 대해서 권한 체크를 할 수가 없다. 클라이언트가 GET이나 POST 요청한다고 해서 서버는 무작정 해당 정보를 접근할 수 있게하면 안된다. 서버가 인증한 클라이언트일 때 특정 정보에 요청 및 접근 할 수 있게 해야 된다. 세션 로그인 토큰 로그인 일반적으로 로그인 권한을 인증하는 방식에는 세션 로그인과 토큰 로그인 2가지가 있다. 모바일과 웹의 환경이 달라서 로그인을 구현하기 위해서 어떻게 구현하는지 정리 해보았다. 세션 로그인 클라이언트(브..
Flutter - 동시성 , 병렬성 , 콜백함수
·
Flutter
동시성(Concurrency)과 병렬성(Parallelism) 동시성 동시에 실행되는 것처럼 보이게 하는 것 하나의 코어에서 여러 개의 스레드를 동작시키기 위한 방식 여러 개 스레드를 컨텍스트 스위치(context switch)로 번갈아 가면서(interleaved) 실행 싱글 코어, 멀티 코어에서 모두 구현 가능 병렬성 여러 개의 코어가 실제로 각각 여러 개의 스레드를 맡아 동시에 처리하는 것 물리적 코어가 필요하므로 멀티 코어에서만 구현 가능 즉, 동시성과 병렬성 주제는 물리적 하드웨어 이슈에 더 가깝다. 콜백 지옥과 콜백 함수 콜백 함수 콜백 함수: 다른 함수의 매개변수에 함수의 이름을 적어 넘겨준 함수이다. 함수를 명시적으로 호출하는 것이 아니라 이벤트 발생하면 이벤트 핸들러가 어떤 상태를 바꾸는..
Flutter - Generators (제너레이터)
·
Flutter
Dart 의 generator 를 살펴보자. generator 의 용도는 to lazily produce a sequence of values 코드상에서 선언된 순간에 바로 데이터가 처리되지 않고 실제로 사용할 때 데이터가 처리된다. 뒤늦게(실제 데이터가 필요할 때) 처리되는 방식은 동기식 과 비동기식이 있다. 둘 다 yield 를 통해 데이터를 전달하는데 return 과 다른점은 처리할 데이터가 있는 동안은 동작을 완료하지 않고 계속 수행하게 된다. Synchronous sync* 속성을 함수가 가지게 된다. Iterable object 를 리턴한다. import 'dart:io'; Iterable generatorSync(int n) sync* { int k=0; while (k < n) { yiel..
Flutter - Timer
·
Flutter
Future.delayed와 Timer Future.delayed: Future 객체를 반환한다. 주어진 시간 만큼 지연 후 함수를 실행한다. 내부적으로는 타이머를 사용하지만 외부에 노출되지 않으므로 중간에 취소하거나 재시작하거나 할 수 없다. Future 객체를 반환하므로 await 키워드를 사용해서 지연 시간을 보장할 수 있다. Timer: 아무 것도 반환하지 않는다. 주어진 시간 만큼 지연 후 함수를 실행한다. 주기적인 타이머 알림을 받을 수 있다. 타이머를 종료(cancel)할 수 있다. Dart: Future.delayed Future.delayed(기간, 함수); 형식으로 호출한다. 기간: Duration 객체, 보통 const 상수로 만든다. 함수: 익명함수 void main() { Futu..
Flutter - Future , async , await
·
Flutter
굳이 비동기 함수로 작성할 필요가 없지만 오직 비동기 함수 작성과 호출 문법을 설명하기 위한 예제이다. 동기 함수의 선언 int sum(int a, int b) { return a + b; } 비동기 함수의 선언 Future sum(int a, int b) async { return a + b; } 동기 함수의 호출 void main() { print(sum(1, 2)); } 비동기 함수의 호출 (await 키워드 사용) Future main() async { final result = await sum(1, 2); print(result); } 비동기 함수의 호출 (Future - then() 메소드 절 사용) Future main() async { sum(1, 2).then((result) { pri..
Flutter - pubspec.yaml
·
Flutter
pubspec.yaml 파일 생성 가장 간단한 pubspec.yaml 파일은 다음과 같다. name: 프로젝트_이름 environment: sdk: '>=2.10.0
Flutter - 클래스 선언과 인스턴스 생성
·
Flutter
객체지향 개요 데이터 캡슐화(encapsulation) 데이터 추상화(abstraction) 복잡한 문제를 다루기 위해서 불필요한 부분들은 숨기고 중요한 부분만을 표현 재사용의 단위 클래스를 통해 객체 단위로 생성되어 움직인다. 정보은닉(블랙박스)을 실현하는 장치 인터페이스를 제외한 데이터와 함수들을 캡슐 속으로 숨기기 때문에 캡슐화를 통해 정보 은닉이 실현 public, private, protected 가시성 키워드가 없다. (자바는 있음) 다트는 기본이 public 변수이고 밑줄(_)을 붙이면 private 변수이다. public 변수는 모든 파일에서 접근이 가능하다. private 변수는 해당 파일에서만 접근이 가능하다. (같은 파일 안에서는 클래서 밖에서도 접근 가능) 속성과 메소드 속성 pro..