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..
Flutter - 함수
·
Flutter
함수 함수 사용의 장점 코드 중복을 줄인다. 코드가 더 명료해진다. 코드의 재사용성이 좋아진다. 복잡한 문제를 간단한 부분으로 쪼갤 수 있다. 정보를 숨긴다. main() 함수 main() 함수는 프로그램의 시작점, 진입점 함수이다. 이름 있는 일반 함수 정의 int add(int x, int y) { return x + y; } 화살표(Arrow) 함수 화살표 함수는 함수의 몸통(body)이 하나의 수식(expression)인 경우 중괄호({})와 return 키워드를 생략하고 간단히 쓸 수 있는 표기법이다. int add(int x, int y) => x + y; 필수 매개변수와 옵션 매개변수 필수 매개변수 단순히 매개변수에 어떤 괄호도 치지 않고 그냥 나열하면 필수 매개변수이다. 옵션 위치(Posi..
Flutter - 타입 검증 연산자
·
Flutter
타입 검증 연산자 as : 타입 캐스팅 is, is! is: 특정 타입여부 인지 여부가 일치하면 true is! : 특정 타입여부 인지 여부가 일치하면 false 객체의 타입을 알아내려면 runtimeType 속성으로 확인 가능하다. 하지만 실제로 런타임 타입 체크를 하려면 Object is Type 조건을 사용한다. // 사용예시 var typeChk = "나의타입"; print(typeChk.runtimeType); // result : String
Flutter - NullAware
·
Flutter
널 인지(Null-aware) 연산자 위젯의 널 여부 확인 사용한다. ?? 좌, 우 피연산자 중에서 Null이 아닌 것을 선택한다. const x = null; const y = 1; const z = 2; print(x ?? y); // 1, 우측 y값 선택 print(y ?? x); // 1, 좌측 y값 선택 print(y ?? z); // 1, 둘다 null이 아니지만 좌측 y값 선택 플러터에서 이용 사례 _image ?? const Text('No Image') ??= const x = null; const y = 1; var t; t ??= x; // t가 null이면 x를 대입하는데 x도 null이다. print(t); // null t ??= y; // t가 null이면 y를 대입한다. pr..
Flutter - 컬렉션 타입
·
Flutter
리스트(List) 다트는 리스트 컬렉션만 제공하고 배열(arrays)은 별도로 제공하지 않는다. 인덱스 슬라이스 원소 추가 원소 삭제 원소 변경 리스트 변수 선언 // 대괄호로 나열한다. const list = [1, 2, 3]; // 원소의 끝에 매번 ,(콤마)를 붙여도 동작한다. const list = [ 'Car', 'Boat', 'Plane', ]; 원소 끝에 콤마를 붙이는 것(trailling comma)이 코드의 가독성에 더 좋다. 리스트의 길이와 인덱싱 var list = [1, 2, 3]; assert(list.length == 3); length 속성으로 리스트의 길이, 원소의 갯수를 구할 수 있다. assert(list[1] == 2); list[1] = 1; assert(list[1]..