[개발] Flutter

[Flutter] Future 란?

  • -
반응형

Flutter의 Future

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

 

 

 

 

Future의 주요 개념

  • 비동기 작업 처리: 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의 상태

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

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

 

 

 

 

 

 

 

FutureBuilder와 Future의 사용

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 '비동기 데이터';
  }
}
    

 

 

 

 

 

 

 

 

 

Future의 주요 메서드

  • then(): 비동기 작업이 성공적으로 완료된 후, 그 결과를 처리하는 메서드입니다.
  • catchError(): 비동기 작업 중 에러가 발생했을 때 에러를 처리하는 메서드입니다.
  • whenComplete(): 작업이 성공 또는 실패에 상관없이 완료되었을 때 호출되는 메서드입니다.

 

 

 

 

 

 

 

 

 

 

 

예제: then()을 사용하는 방법

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를 사용하여 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 처리할 수 있습니다.

반응형

'[개발] Flutter' 카테고리의 다른 글

[Flutter] Scaffold 란?  (0) 2024.09.26
[Flutter] await rootBundle.loadString 란?  (0) 2024.09.25
[Flutter] State<StatefulWidget> 란?  (0) 2024.09.23
[Flutter] {super.key} 란?  (0) 2024.09.22
[Flutter] onPressed / onTap 차이  (0) 2024.09.21
Contents

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

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