Future Api - GlobalMediaBridge/cosmetic-server GitHub Wiki

Future

일반적으둜 ν•¨μˆ˜λ₯Ό μˆ˜ν–‰ν•˜λ©΄ return의 κ²°κ³Όλ₯Ό 받을 수 μžˆλ‹€.

int square(int x) {
    return x * x;
}

ν•¨μˆ˜ squareλŠ” μž…λ ₯받은 κ°’ xλ₯Ό μ œκ³±ν•΄μ„œ λ°˜ν™˜ν•œλ‹€κ³  ν•΄λ³΄μž.

void main(){
    int result = square(2);
}

μ΄λŸ°μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ¦‰μ‹œ 값을 λ°˜ν™˜ν•œλ‹€. ν•˜μ§€λ§Œ λ§Œμ•½μ— square ν•¨μˆ˜κ°€ μ˜€λž˜κ±Έλ¦¬λŠ” μž‘μ—…μ΄λΌκ³  ν•œλ‹€λ©΄ 이 ν•¨μˆ˜κ°€ 끝날 λ•Œ λ‹€λ₯Έ μž‘μ—…μ„ ν•  수 없을 것이닀. λͺ¨λ°”일 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우 화면이 보이고 μ‚¬μš©μžμ™€ μΈν„°λ ‰μ…˜μ΄ 이루어지기 λ•Œλ¬Έμ— μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ™μ•ˆ 화면이 λ©ˆμΆ”κ²Œ λœλ‹€λ©΄ 큰 닡닡함을 느끼게 될 것이닀. μ΅œμ†Œν•œ ν•΄λ‹Ή μž‘μ—…μ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆ λ‘œλ”© 화면이라도 λ³΄μ—¬μ£Όμ–΄μ•Όν•œλ‹€. 즉 λ‘œλ”© ν™”λ©΄μ΄λ‚˜ 기타 λ‹€λ₯Έ λ™μž‘μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ˜€λž˜κ±Έλ¦¬λŠ” μž‘μ—…μ€ 직접 μ²˜λ¦¬ν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

μ˜€λž˜κ±Έλ¦¬λŠ” μž‘μ—…μ„ 직접 μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  Futureμ—κ²Œ λŒ€μ‹  μ²˜λ¦¬ν•˜λ„λ‘ 맑길 수 μžˆλ‹€. ν”„λ‘œκ·Έλž¨μ€ Futureμ—κ²Œ μž‘μ—…μ„ μ‹œμž‘ν•˜λΌκ³  μ§€μ‹œν•˜λ©΄ Futureκ°€ μ•Œμ•„μ„œ μž‘μ—…μ„ 마친 λ’€ ν”„λ‘œκ·Έλž¨μ—κ²Œ μž‘μ—…μ΄ λ§ˆμ³€μŒμ„ μ•Œλ¦¬λŠ” 방식이닀.

λŒ€λΆ€λΆ„μ˜ apiμ—μ„œ μ˜€λž˜κ±Έλ¦¬λŠ” μž‘μ—…μ€ Futureλ₯Ό μ΄μš©ν•΄μ„œ λ§Œλ“€μ–΄μ‘Œλ‹€. μš°λ¦¬λŠ” Futureλ₯Ό λ§Œλ“œλŠ” 방법보닀 Futureλ₯Ό μ‚¬μš©ν•˜λŠ” 방법에 집쀑해보겠닀.

Futureλ₯Ό μ΄μš©ν•˜λŠ” ν•¨μˆ˜ futureSquareκ°€ μžˆλ‹€κ³  ν•˜μž. 이 ν•¨μˆ˜λŠ” νŒŒλΌλ―Έν„°λ‘œ λ„˜κ²¨μ€€ 값을 μ œκ³±ν•΄μ„œ μž‘μ—…μ΄ λλ‚˜λ©΄ ν”„λ‘œκ·Έλž¨μ—κ²Œ μ•Œλ €μ€€λ‹€. 이 ν•¨μˆ˜λŠ” μ•„λž˜μ™€ 같이 μ‚¬μš©ν•  수 μ—†λ‹€.

void main(){
    int result = futureSquare(2);
}

futureSquare ν•¨μˆ˜μ˜ 결과값은 νŒŒλΌλ―Έν„°λ‘œ λ„˜κ²¨μ€€ κ°’μ˜ μ œκ³±ν•œ κ²°κ³Όκ°€ μ•„λ‹ˆλΌ ν•΄λ‹Ή μž‘μ—…μ΄ λλ‚¬λŠ”μ§€μ— λŒ€ν•œ future값이닀. 이 futureκ°’ μ•ˆμ— μ‹€μ œ κ²°κ³Όκ°€ 감싸져 μžˆλ‹€. μ‹€μ œ κ²°κ³Όλ₯Ό κΊΌλ‚΄μ£ΌκΈ° μœ„ν•΄μ„œλŠ” async await을 μ‚¬μš©ν•œλ‹€. ν•΄λ‹Ή ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ— async ν‚€μ›Œλ“œλ₯Ό 뢙이고 futureκ°€ λ°˜ν™˜λ˜λŠ” κ³³ μ•žμ— await을 λΆ™μ—¬μ£Όλ©΄ λœλ‹€.

void main() async {
    int result = await futureSquare(2);
}