[Dart] Future, async, await

Liaยท2022๋…„ 8์›” 7์ผ
0

๐ŸŽฏย Dart

๋ชฉ๋ก ๋ณด๊ธฐ
3/3
post-thumbnail

๐Ÿ”Ž์˜ˆ์‹œ๋กœ Future ์ดํ•ดํ•˜๊ธฐ

๐Ÿ”ํŒจ์ŠคํŠธํ‘ธ๋“œ์ ์—์„œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ ๋จน๋Š”๋‹ค๊ณ  ๊ฐ€์ •๐Ÿ”
ํ–„๋ฒ„๊ฑฐ๋ฅผ ์ฃผ๋ฌธํ•˜๊ณ  ์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ฐ€ ์ ํžŒ ์˜์ˆ˜์ฆ์„ ๋ฐ›๋Š”๋‹ค->๋‚ด ์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ฐ€ ํ™”๋ฉด์— ๋œจ๋Š” ๋™์•ˆ (๋‚ด ํ–„๋ฒ„๊ฑฐ๊ฐ€ ๋‚˜์˜ฌ๋™์•ˆ) ํ™”์žฅ์‹ค์— ๋‹ค๋…€์˜ค๊ฑฐ๋‚˜ ์Œ์•…์„ ๋“ฃ๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ๋‹ค๋ฅธ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค->๋‹ค๋ฅธ์ผ์„ ํ•˜๋Š” ๋„์ค‘์— ๋‚ด ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ๋ชจ๋‹ˆํ„ฐ์— ๋‚˜์™”๋Š”์ง€๋งŒ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค->๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ๋ฌธ์˜์ˆ˜์ฆ์€ ์ตœ์ข…์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜, ์˜์ˆ˜์ฆ์€ ๋ฏธ๋ž˜์— ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋ฌธํ•œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ผ์ข…์˜ ์•ฝ์† ! (์‹ค์ œ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” Future์™€ ๋”๋ถˆ์–ด โ€˜์•ฝ์†โ€™์ด๋ผ๋Š” ๋œป์˜ Promise๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•จ)

์ด๋ ‡๋“ฏ Future์€ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋ฌธ ํ›„ ์•„์ง ๋ฐ›์ง€ ์•Š์€ ํ–„๋ฒ„๊ฑฐ์ฒ˜๋Ÿผ ํ˜„์žฌ์—๋Š” ์‹ค์ œ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์ž„, ๊ทธ๋Ÿฌ๋‚˜ ์ž ์‹œ ํ›„์— ์ฃผ๋ฌธ ์˜์ˆ˜์ฆ์ด ํ–„๋ฒ„๊ฑฐ๋กœ ๊ตํ™˜๋ ๋•Œ ๋น„๋กœ์†Œ ๊ตฌ์ฒด์ ์ธ ์‚ฌ๋ฌผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

Dart์—์„œ Futureํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฏธ๋ž˜์— String,int,image ๋“ฑ ๊ทธ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๊ตฌ์ฒด์ ์ธ ๊ฒฐ๊ณผ๋ฌผ๋กœ ๋‚˜ํƒ€๋‚˜์„œ ์‹ค์ œ์ ์ธ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค๋Š” ์˜๋ฏธ
๊ทธ๋ž˜์„œ Future์€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ๋ฌธ ์˜์ˆ˜์ฆ๊ณผ ๊ฐ™์€ ๊ฒƒ
์ฆ‰, ์ผ์ข…์˜ ์•ฝ์†์ด์ž ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ž ์‹œ ํ›„์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ์ ์ธ ์‚ฌ๋ฌผ์ด ๋˜๋Š” ๊ฒƒ

Future์„ ์„ค๋ช… ํ•  ๋•Œ ์•„์ง ๊ฐœ๋ด‰ํ•˜์ง€ ์•Š์€ ๋ฐ•์Šค๋กœ ๋น„์œ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
Futureํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋‹จ Future์ด๋ผ๋Š” ๊ฐ์ฒด, ์ฆ‰ ๋ฐ•์Šคํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ์ด ๋˜๊ณ  ํ›„์— ์—ฐ๋ฝ์„ ๋ฐ›๊ณ  ๋ฐ•์Šค๋ฅผ ์—ด์–ด๋ณด๋ฉด int๋‚˜ String ๋˜๋Š” ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ๊ฑด ์‹ค์ œ์ ์ธ ๊ฐ์ฒด๊ฐ€ ๋ฆฌํ„ด ์ฆ‰, ๋ฐ•์Šค ์•ˆ์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์šฐ๋ฆฌ๋Š” ์ฃผ๋ฌธํ•  ๋•Œ ๋‹น์—ฐํžˆ ์šฐ๋ฆฌ๊ฐ€ ์ž ์‹œ ํ›„์— ๋ฌด์—‡์„ ๋จน๊ฒŒ ๋  ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค.Future๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ›์•„์•ผ ํ•  ์ง€ ๋ฏธ๋ฆฌ ์ง€์ •์„ ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค
Futureํด๋ž˜์Šค๋Š” ์ œ๋„ˆ๋ฆญ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.
Future< >

ex) Future<String>

๐Ÿ”Ž์˜ˆ์‹œ๋กœ async,await ์ดํ•ดํ•˜๊ธฐ

๋ฐ”์œ ์ ์‹ฌ์‹œ๊ฐ„๋Œ€ ์ค‘๊ตญ์ง‘์—์„œ 10๋ช… ์ค‘ 8๋ช…์€ ์งœ์žฅ๋ฉด์„ ์ฃผ๋ฌธํ•˜๊ณ  1๋ช…์€ ์งฌ๋ฝ•, 1๋ช…์€ ๋ณถ์Œ๋ฐฅ์„ ์ฃผ๋ฌธํ–ˆ์„๋•Œ ์ฃผ๋ฐฉ์žฅ์ด ์ฃผ๋ฌธ์ด ์ œ์ผ ๋จผ์ € ๋“ค์–ด์™”๊ณ  ์ œ์ผ ์–‘์ด ๋งŽ์€ ์งœ์žฅ๋ฉด๋งŒ์„ ๋จผ์ € ๋งŒ๋“ค๊ณ  ๋‚˜๋จธ์ง€ ๋ฉ”๋‰ด๋Š” ์ „ํ˜€ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์งฌ๋ฝ•๊ณผ ๋ณถ์Œ๋ฐฅ์€ ํ•œ์ฐธ ๋’ค์— ๋งŒ๋“ค์–ด ์งˆ ๊ฒƒ์ด๋‹ค.
๋ฐ”์˜๋ฉด ๋™์‹œ์— ์งœ์žฅ๋ฉด ๋ฉด์„ ์‚ถ์œผ๋ฉฐ ๋ฐฅ๋„ ๋ณถ๊ณ  ์งฌ๋ฝ• ๊ตญ๋ฌผ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.->์ผ์„ ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์ถ”๊ตฌํ•˜๋Š” ๋ชฉ์ ์ด ๋‹ค๋ฅด๊ณ  ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผํ•˜๋Š” ๊ฒƒ ->Async ๋น„๋™๊ธฐ
์งœ์žฅ๋ฉด๋งŒ ๋จผ์ € ๋งŒ๋“œ๋Š” ๊ฒƒ -> ํ•œ๊ฐ€์ง€ ๋ชฉ์ ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์ˆœ์„œ๋Œ€๋กœ ํ•ด์•ผํ•  ์ผ ํ•œ๊ฐ€์ง€๋งŒ ํ•˜๋Š”๊ฒƒ->Synchronous ๋™๊ธฐ

๐Ÿ’กasync์™€ ๊ด€๋ จํ•ด์„œ await๋Š” ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ผ๋Š” ์˜๋ฏธ !
1.await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด async ํ•จ์ˆ˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Future functionName() async {
  ...
  await someFunction();
  ...
}

2.async ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด Future ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ž์ฝ”๋“œ๋กœ Future ์ดํ•ดํ•˜๊ธฐ

import 'dart:async';

Future<int> futureNumber() {
  // 3์ดˆ ํ›„ 100์ด ์ƒ์ž์—์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค
  return Future<int>.delayed(Duration(seconds: 3), () {
    return 100;
  });
}

void main() {
  // future ๋ผ๋Š” ๋ณ€์ˆ˜์—์„œ ๋ฏธ๋ž˜์—(3์ดˆ ํ›„์—) int๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค
  Future<int> future = futureNumber();

  future.then((val) {
    // int๊ฐ€ ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ๊ฐ’์„ ์ถœ๋ ฅ
    print('val: $val');
  }).catchError((error) {
    // error๊ฐ€ ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅ
    print('error: $error');
  });

  print('๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘');
}

์œ„ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ถœ๋ ฅ์ด ๋œ๋‹ค.

๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘
val: 100

Future๋Š” ๋น„๋™๊ธฐ๋ฅผ ์œ„ํ•ด์„œ ์กด์žฌํ•œ๋‹ค. ๋งŒ์•ฝ 100์ค„์˜ ์ฝ”๋“œ์˜€๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณธ๋‹ค๋ฉด, ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์„ ๊ฒฝ์šฐ Future<int> ์—์„œ ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ 100์ค„์˜ ์ฝ”๋“œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ  ์ •์ง€ํ•ด์žˆ์„๊ฒƒ์ด๋‹ค. ์ด 100์ค„์˜ ์ฝ”๋“œ์— Future<int>๋กœ๋ถ€ํ„ฐ ๋‚˜์˜ฌ ๊ฐ’์ด ์ „ํ˜€ ํ•„์š”์—†๋‹ค๋ฉด ๋งค์šฐ ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋‹ค.

Future<int> ์—์„œ ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š์•„๋„ ๊ณ„์†ํ•ด์„œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์ฝ”๋“œ์—์„œ 3์ดˆ๊ฐ€ ์ง€๋‚˜ future์˜ then์ด ๋™์ž‘ํ•˜๊ธฐ ์ „์— ๊ณ„์†ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋ฐ‘์˜ print ๊ฐ€ ๋จผ์ € ์ถœ๋ ฅ์ด ๋œ๋‹ค.

๐Ÿ”Ž์ฝ”๋“œ๋กœ Future async,await ์ดํ•ดํ•˜๊ธฐ

Future<ProcessedData> createData() {
  return _loadFromDisk().then((id){
    return _fetchNetworkData(id);
  }).then((data){
    return ProcessedData(data);
  })
}

์ด ํ•จ์ˆ˜๋Š” ๋ฏธ๋ž˜์— ProcessedData ๊ฐ€ ๋‚˜์˜ฌ ์ƒ์ž์ธ Future๋ฅผ returnํ•œ๋‹ค. ๊ฐ€์žฅ ๋จผ์ € ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ id ๊ฐ’์„ ์ฝ์–ด๋“ค์ด๋Š” _loadFromDsik() ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰๋˜๊ณ , id ๋ฅผ ์ฝ์–ด๋“ค์ด๋ฉด _fetchNetworkData() ํ•จ์ˆ˜์— id๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•ด data ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  data ๋ฅผ ๋‹ค ๋ฐ›์•„์˜ค๋ฉด ProcessedData(data) ๋ฅผ return ํ•œ๋‹ค.

Future<ProcessedData> createDate() async {
  final id = await _loadFromDisk();
  final data = await _fetchNetworkData(id);
  return ProcessedData(data);
}

then ์„ ์ด์šฉํ•ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ์ง€๋งŒ, ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๋ฉฐ ๋งˆ์น˜ ๋™๊ธฐ์ ์œผ๋กœ ์ผ์–ด๋‚˜๋Š” ์ฝ”๋“œ์ธ ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ„๊ฒฐํ•จ ๋•Œ๋ฌธ์— async / await ๋Š” Future ๋ฅผ ์กฐ๊ธˆ ๋” ์šฉ์ดํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์™€์ค€๋‹ค.

Future<ProcessedData> createDate() async {
final id = await _loadFromDisk();
final data = await _fetchNetworkData(id);
return ProcessedData(data);
}

์ฝ”๋“œ์˜ ์ˆœ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด
1.createData() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๊ฐ€์žฅ๋จผ์ € ์ฒซ ๋ฒˆ์งธ ์ค„์˜ await ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ _loadFromDisk() ๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ '์•„, await ๋ฅผ ๋ณด๋‹ˆ ์ด ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋ญ”๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด ํ•„์š”ํ•˜๊ฒ ๊ตฐ.' ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ์ผ๋‹จ ์ด ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰์„ ๋ฉˆ์ถ˜๋‹ค.

2.๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์— Future ๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ ๋Š” "์ด ํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ์ข€ ํ•„์š”ํ•ด. ์ผ๋‹จ ProcessedData ๊ฐ€ ๋‹ด๊ธธ ์ƒ์ž Future ๋ฅผ ๋ฏธ๋ฆฌ ์ค„๊ฒŒ. ๋‚˜์ค‘์— ์ด ํ•จ์ˆ˜๊ฐ€ ๋ชจ๋‘ ์™„๋ฃŒ๋˜๋ฉด ProcessedData ๊ฐ€ ๋‚˜์˜ฌ๊ฑฐ์•ผ." ๋ผ๊ณ  ๋งํ•œ๋‹ค.
ํ•ด๋‹น ํ•จ์ˆ˜๋Š” await ๊ฐ€ ๋ถ™์€ _loadFromDisk() ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ฐ€๋งŒํžˆ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์ƒ์ž์—์„œ ๊ฐ’์ด ๋‚˜์™€์•ผ then ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์ด ๋ง์ด๋‹ค.

3._loadFromDisk() ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๋‹ค์Œ ์ค„์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋ฒˆ์—๋„ await ๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ _fetchNetworkData(id) ๊ฐ€ ์ˆ˜ํ–‰์™„๋ฃŒ ๋  ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜๋ฅผ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

4.2๋ฒˆ ์งธ ์ค„๋„ ๋‹ค ๋งˆ์น˜๋ฉด ์ด์ œ return ProcessedData(data) ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค. ์ด return ์„ ํ†ตํ•ด createData() ๋ฅผ ํ˜ธ์ถœํ•œ ๋…€์„์ด ๋ฐ›์€ ์ƒ์ž์—์„œ ProcessedData ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿฐ ์ˆœ์„œ๋กœ ๋™์ž‘์„ ํ•ฉ๋‹ˆ๋‹ค. await ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๋™์ž‘์„ ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ฉˆ์ถ”์–ด์„œ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— then(...) ํ•จ์ˆ˜ ์ฒ˜๋Ÿผ ๋™์ž‘์„ ํ•˜๋ฉฐ ์ „์ฒด์ ์ธ ์ฝ”๋“œ๋Š” ํ›จ์”ฌ ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ„ ์ˆœ์„œ์—์„œ 2๋ฒˆ ๋•Œ๋ฌธ์— async ํ•จ์ˆ˜์˜ return ํƒ€์ž…์€ ๋ฌด์กฐ๊ฑด Future ์ด์–ด์•ผ ํ•œ๋‹ค. await ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์„ ํ…Œ๋‹ˆ async ํ•จ์ˆ˜์ผ ํ…Œ๊ณ , await ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ํ•จ์ˆ˜์˜ return ๊นŒ์ง€ ๊ฐ€๊ธฐ ์ด์ „์— ๋ฏธ๋ฆฌ Future ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ async ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด Future ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ!

๐Ÿ’กawait ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์— Future ๋ฅผ return ํ•œ๋‹ค.
๐Ÿ’กawait ๊ฐ€ ๋ถ™์€ ๋™์ž‘์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•จ์ˆ˜๋ฅผ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
๐Ÿ’กreturn ์„ ํ†ตํ•ด 1๋ฒˆ์—์„œ ์ฃผ์—ˆ๋˜ Future ์—์„œ return ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ํ•œ๋‹ค.

๐Ÿ“์ฐธ๊ณ ์ž๋ฃŒ

profile
๊บพ์ด์ง€์•Š๊ธฐแ•™เผผ*โ—•_โ—•*เผฝแ•ค

0๊ฐœ์˜ ๋Œ“๊ธ€