json 이랑 똑같이 생긴 다트 Map이란 타입이 있는데, 그걸로 받아 줌
Dart의 MAP 타입의 형태
통신을 하게 되면, json으로 받느넥 아니라 Map인 이타입으로 받게 된다.
가져다 쓰면 되는 방법
근데 이 문법이 위험한 이유는 문자열로 호출하기 때문이다. 하다보면 무조건 실수 하게 되어있다.
그래서 Object로 파싱해서 .으로 호출하게끔 바꿔야 된다.
통신을 할 때 기본은 항상 자기 오브젝트로 바꾸는 것!!!
단일 스레드로 여러가지 작업을 처리하는 방법?
절차적으로 통신이 필요하면 통신요청을 해서 메모장이 기록한다.
일단 스레드 순차적으로 다 실행된 후 ( 다 그림이 그려진 후) 완료하지 못한 작업으로 돌아간다.
만약 아직도 작업이 끝나지 경우에는 pending이 걸리게 된다.
어떻게든 우선적으로 처리할 작업을 처리하고 나중에 꼭 돌아와서 작업을 처리하는 것이,
promise라고 한다.
플러터는 단일 스레드로 작동하기 때문에 block당하지 않게 작업처리를 하는 promise를 활용해야한다.
DAO(Data Access Object) → DB접근 오브젝트
Repository → 디비 or 다른 API or 파일
모든 휴대폰이 자체 DB를 접근하기 위해서 사용하는 SQLite
Post post = PostRepository().findById(2);
Java
복사
아이템 카운트
간단한 promise 예제
int download(){
Future<int> future = Future.delayed(
Duration(seconds: 3),
() => 5
);
return future;
}
void main() {
int result = download();
print(result);
}
Java
복사
Future.delayed는 “3초뒤에 5를 리턴해줄께” 라는 어음을 리턴해준다.
그 어음을 Future타입이고 약속을 리턴 받는 것이다.
비동기 함수 설정하는 법
메소드 옆에 async를 붙이면 메인 스레드는 해당 함수를 요청하고 빠져 나간다.
하지만 여기서 주의해야 될 점은, 이 예제에서 요청 후 함수를 빠져나가면 main함수를 빠져나가는 것이기 때문에, 프로그램이 종료가 될 것이다.
Future타입이 리턴이 되면 await를 걸어줘야 되고, await가 걸리면 메소드에 async를 달아줘야 된다. 문법이다!!! (그냥 외워라 이해하지말고)
함수 실행순서
1. 메인 스레드는 순차적으로 코드를 실행해 나간다.
2. 메소드에 async가 걸려있으면 일단 메모장에 할일을 등록하고 해당 메소드를 빠져 나온다.
3.
가짜 통신 예제
여기서 3초 있다가 리턴이 되는건가??
아니다. 바로 리턴이 되는데 타입이 선물박스인 future가 리턴이 된다 .
Future Builder 가 따로 그릴 수 있게 도와준다.
Future Builder 사용 예제
future:
Future타입을 리턴을 받는다.
builder가 하는 역할???
이벤트 루프를 돌면서, 객체가 pending인지 체크, pending이 종료가 되면 그림을 그리게 도와준다.