Christmas Pikachu Future(비동기) - 1
개발일지/Dart

Future(비동기) - 1

ZI_CO 2022. 11. 10.

https://dartpad.dev/?

코드테스트 해보기

 

DartPad

 

dartpad.dev

 

Future<String> 라는 상자가 있습니다. 이 상자는 지금 닫혀있습니다 하지만 이 상자를 준 함수 말합니다.

지금은 그 상자는 닫혀있지만, 나중에 열리면 String나 error 이 나올 거야 두 경우 모두 대비를 해줘 ~~

이상자를 받은 변수는 상자로부터 String가 나올 때를 대비해 then 메소드를 준비 해주어야 합니다.

void main() {
  Future<String> futureName = fName();
  futureName.then((value) => print("value: $value"));

  print("기다리는 중");
}

Future<String> fName() {
  // 3초후 네이버라는 이름이 상자에서 나옵니다
  return Future<String>.delayed(Duration(seconds: 3),() => "네이버");
}

 

 

결과!

 

 

 

코드 흐름상 위에서 아래로 떨어지는데 네이버가 먼저안나오고 기다리는 중...  글자가 먼저 나왔을까?

이부분은 Future는 비동기를 위해 존재하는 이유이다. 

 

 

 

비동기란 보통 디스크로부터 읽거나 쓸 때, 네트워크 통신처럼 다소 오랜 시간이 필요한 경우에 유효하다.

해당 동작들이 완료될 때까지 기다리지 않고 다른 동작을 수행할 수 있기 때문이다.

 

그럼 다시 코드로 돌아와서  Future는 비동기를 하기 위해서 존재한다. 위에 코드에서 main 함수의 가장 마지막 줄에 

print가 있다. 만약 코드가 100줄이 있다고 가정하자 동기적으로 처리했을 경우에는 Future<String>에서 값이 나올 때까지

100줄의 코드는 동작하지 않고 정지해 있을을 것이다. 100줄의 코드에 Future<String>로부터 나올 값이 전혀 필요 없다면 시간 낭비이다.

 

이런 낭비를 막고자 비동기적으로 처리하는 것이다. Future<String>에서 값이 나오지 않아도 계속해서 동작을 수행할 수 있도록 말이다. 그렇기 때문에 위 코드에서 3초가 지나 future의  then이 동작하기 전에 계속 코드의 흐름은 아래로 흐르면서 print가 먼저 수행 되는 것이다.

'개발일지 > Dart' 카테고리의 다른 글

Future(비동기) - async , await 활용 - 1  (0) 2022.11.10
Future(비동기) - 2  (0) 2022.11.10
Laxical Scope  (0) 2022.11.09
클로저(Laxical Closure)  (0) 2022.11.09
익명함수  (0) 2022.11.09

댓글