일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DFS
- fragment
- Flutter
- ViewPager
- 230508
- javascript
- serializable
- DOMContentLoaded
- 230510
- 프래그먼트
- parcelable
- ActionBar
- 함수 인자
- querySelector
- 부가데이터
- classList
- html
- intent
- 데이터 타입
- string
- 인텐트
- 안드로이드
- Class
- putextra
- C++
- Adapter
- textContent
- 생명주기
- null-safety
- 230503
- Today
- Total
나만의 개발노트
[Flutter] API, HTTP, Future, async/await 본문
[API]
: Application Programming Interface - 소프트웨어 응용 프로그램들이 서로 상호작용할 수 있게 해주는 인터페이스
<API의 주요 기능>
1. 데이터 교환 : 두 시스템 간에 데이터 주고 받기
ex) 날씨 앱 - 날씨 데이터를 제공하는 서버로부터 데이터를 가져오는 경우
2. 기능 호출 : 다른 시스템의 기능을 호출
ex) 결제시스템 API를 사용하여 결제 처리
3. 추상화 : 복잡한 구현 세부 사항을 숨기고, 단순화된 인터페이스를 제공
<API의 종류>
1. REST API :
HTTP를 기반으로 하는 API, 자원을 URL로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 자원에 대한 작업을 수행 * REST API는 주로 JSON 형식으로 데이터 주고 받음
2. SOAP API:
XML을 기반으로 메시지를 교환하는 프로토콜로, 웹 서비스 간의 통신에 사용. REST에 비해 더 복잡하지만, 강력한 보안 및 트랜잭션 관리를 제공
3. GraphQL: 클라이언트가 필요한 데이터를 정확하게 요청할 수 있는 쿼리 언어로, 복잡한 데이터 요청을 최적화하고 여러 리소스를 한 번에 가져올 수 있음
<http 다운 방법>
https://pub.dev/packages/http/install
<REST API 사용코드>
import 'package:http/http.dart' as http;
class ApiService {
final String baseUrl = 'https://webtoon-crawler.nomadcoders.workers.dev';
final url = Uri.parse('$baseUrl/$today');
var response = await http.get(url);
if (response.statusCode == 200) {
//불러오기 성공 시
} else {
throw Error();
}
}
}
[ 동기(synchronous) / 비동기(asynchronous) 작업]
- 동기 작업 : 작업이 순차적으로 실행되는 방식 -> 하나의 작업이 끝날 때까지 다음 작업이 시작되지 않는다
- 비동기 작업 : 작업이 시작된 후 바로 다음 작업을 시작할 수 있게 한다. -> 비동기 작업의 결과는 나중에 처리된다.
따라서 비동기 작업은 주로 파일 읽기/쓰기, 네트워크 요청, 데이터베이스 쿼리 등 시간이 오래 걸리는 작업에 사용된다
[Future 타입]
: 현재는 값을 가지고 있지 않지만, 미래에 완료될 작업의 결과를 나타냅니다.
- 비동기 작업을 표현하기 위해 사용되는 클래스
import 'dart:async';
void main() {
print('작업 시작');
// 2초 후에 완료되는 Future
Future.delayed(Duration(seconds: 2), () {
return '작업 완료';
}).then((result) {
print(result);
});
print('다른 작업 수행 중');
}
//output : 작업시작 / 다른 작업 수행 중 / 작업 완료
- then, async/await 키워드를 사용하여 더 직관적으로 코드 작성 가능
<then 사용 코드>
: Future가 완료되었을 때 호출되는 콜백 함수 -> Future의 결과값을 인수로 받는다
fetchData().then((data) {
print(data); // 'Hello, World!' 출력
}).catchError((error) {
print(error);
}).whenComplete(() {
print('완료됨');
});
[async/await 키워드]
- async : 함수나 메서드가 비동기 작업을 수행할 것임을 나타냄 (= async 키워드가 붙은 함수는 항상 Future을 반환함)
- await : Future의 완료를 기다린 후, 완료된 Future의 결과를 반환 (await는 반드시 async 함수 내에서만 사용 가능)
Future<String> someAsyncFunction() async {
return Future.delayed(Duration(seconds: 2), () => 'Hello, World!');
}
Future<void> fetchData() async {
// await 키워드를 사용하여 Future의 완료를 기다림
String data = await someAsyncFunction();
print(data); // 'Hello, World!' 출력
}
'[Flutter] > [Flutter]' 카테고리의 다른 글
[Flutter] API로 정보 불러오기 (0) | 2024.07.26 |
---|---|
[Flutter] flexible, alignment, expanded, Timer, Duration (1) | 2024.07.24 |
[Flutter] Widget LifeCycle - initState(), build(), dispose() (0) | 2024.07.22 |
[Flutter] BuildContext와 Theme - 스타일시트 저장하기 (0) | 2024.07.22 |
[Flutter] flutter로 UI 구성해보기 (0) | 2024.07.19 |