[개발] Flutter

[Flutter] Future 란?

  • -
반응형

Flutter의 Future

Future는 Flutter와 Dart에서 비동기 작업을 처리하기 위한 객체입니다. Future는 나중에 완료될 작업을 나타내며, 데이터나 값이 준비되지 않은 상태에서 비동기 작업을 수행할 수 있게 해줍니다.

 

 

 

 

  • 비동기 작업 처리: Future는 시간이 오래 걸리는 작업(예: 네트워크 요청, 파일 읽기/쓰기)이 완료될 때까지 기다리지 않고, 작업이 완료되면 그 결과를 처리할 수 있게 도와줍니다.
  • 두 가지 결과: Future는 두 가지 상태를 가질 수 있습니다. 성공적으로 완료되어 값을 반환하거나, 오류가 발생하여 에러를 반환할 수 있습니다.

 

 

 

 

 

간단한 Future 사용 예시는 아래와 같습니다. 2초 후에 데이터를 반환하는 비동기 함수를 정의한 것입니다:

Future fetchData() async { await Future.delayed(Duration(seconds: 2)); return '데이터가 로드되었습니다'; } void main() async { print('데이터 로딩 중...'); String data = await fetchData(); // 비동기 함수 호출 및 결과 대기 print(data); // '데이터가 로드되었습니다' 출력 }

Future는 세 가지 상태를 가질 수 있습니다:

  • Uncompleted: 비동기 작업이 아직 완료되지 않은 상태입니다.
  • Completed with a value: 비동기 작업이 성공적으로 완료되고 값을 반환한 상태입니다.
  • Completed with an error: 비동기 작업 중 에러가 발생하여 에러가 반환된 상태입니다.

Flutter에서는 FutureBuilder를 사용하여 Future의 상태를 추적하고, 그에 따라 UI를 업데이트할 수 있습니다.

class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('FutureBuilder 예제'), ), body: Center( child: FutureBuilder( future: fetchData(), // 비동기 작업 호출 builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return CircularProgressIndicator(); // 대기 중일 때 로딩 표시 } else if (snapshot.hasError) { return Text('에러 발생: ${snapshot.error}'); } else if (snapshot.hasData) { return Text('데이터: ${snapshot.data}'); // 데이터를 성공적으로 받았을 때 } else { return Text('데이터 없음'); } }, ), ), ), ); } Future fetchData() async { await Future.delayed(Duration(seconds: 2)); return '비동기 데이터'; } }
  • then(): 비동기 작업이 성공적으로 완료된 후, 그 결과를 처리하는 메서드입니다.
  • catchError(): 비동기 작업 중 에러가 발생했을 때 에러를 처리하는 메서드입니다.
  • whenComplete(): 작업이 성공 또는 실패에 상관없이 완료되었을 때 호출되는 메서드입니다.

then() 메서드를 사용하여 비동기 작업의 결과를 처리하는 예시는 다음과 같습니다:

Future fetchData() async { await Future.delayed(Duration(seconds: 2)); return '데이터가 로드되었습니다'; } void main() { fetchData().then((data) { print(data); // '데이터가 로드되었습니다' 출력 }).catchError((error) { print('에러 발생: $error'); }); }

Future는 Flutter에서 비동기 작업을 처리하는 매우 중요한 도구입니다. 네트워크 요청, 파일 입출력 등 시간이 걸리는 작업을 수행할 때 Future를 사용하여 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 처리할 수 있습니다.

반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.