아마도 Effective 한 Kotlin

7589a5a8fec022e8af4e46525150a291?s=47 TaeHwan
September 07, 2020

아마도 Effective 한 Kotlin

드로이드 나이츠 발표 영상
- https://www.youtube.com/watch?v=tna95Q7bnNg

효과적인 Kotlin 사용을 위해 알아볼 내용
- 가독성을 위한
- Property
- Scope function
- Sequence
- Coroutines

블로그 글
https://thdev.tech

발표자료 내에 포함되어있는 링크
구글 자바 가이드 : https://google.github.io/styleguide/javaguide.html
안드로이드 AOSP 코드 컨벤션 : https://source.android.com/setup/contribute/code-style
안드로이드 코틀린 가이드 : https://developer.android.com/kotlin/style-guide

7589a5a8fec022e8af4e46525150a291?s=128

TaeHwan

September 07, 2020
Tweet

Transcript

  1. 4QFBLFSMӂకജ 아마도 Effective 한 Kotlin উ֞ೞࣁਃই݃ب&GGFDUJWFೠ௏ౣܽഝਊߨਸߊ಴ೡӂకജੑפ׮

  2. ബҗ੸ੋ,PUMJOࢎਊਸਤ೧ঌইࠅղਊ ✓ оةࢿਸਤೠ ✓ 1SPQFSUZ ✓ 4DPQFGVODUJPO ✓ 4FRVFODF ✓

    $PSPVUJOFT
  3. 가독성을 위한 ݢ੷оةࢿਸਤೠݻо૑ߑߨਸ࢓ಝࠇפ׮

  4. оةࢿਸਤೠ DMBTT5FTU\ QSJWBUFWBMN/BNF4USJOHOBNF ژח QSJWBUFWBMOBNF4USJOHOBNF ^ ੿׹਷হ૑݅௏٘ஶ߮࣌੉೙ਃೣ਷ঌࣻ੓׮ ൔೞѱࠅࣻ੓ח੹৉߸ࣻо૑ܳաৌ೮णפ׮ ই݃ഥࢎ௏٘ীࢲبо૑ݽفܳൔೞѱࠅࣻ੓ਸబؘ ௏٘ஶ߮࣌੉೙ਃೣਸঌࣻ੓ભ

  5. оةࢿਸਤೠ௏٘ஶ߮࣌ଵҊޙࢲ ✓ (PPHMF+BWB$POWFOUJPOT ✓ "041+BWB$POWFOUJPOT ✓ "OESPJE,PUMJOTUZMFHVJE ௏٘ஶ߮࣌ଵҊೡࣻ੓חޙࢲо૑ޙࢲо੓ਵפଵҊೞࣁਃ IUUQTHPPHMFHJUIVCJPTUZMFHVJEFKBWBHVJEFIUNM IUUQTTPVSDFBOESPJEDPNTFUVQDPOUSJCVUFDPEFTUZMF

    IUUQTEFWFMPQFSBOESPJEDPNLPUMJOTUZMFHVJEF
  6. оةࢿਸਤೠ௏٘ஶ߮࣌ଵҊޙࢲ ✓ (PPHMF+BWB$POWFOUJPOT ✓ "041+BWB$POWFOUJPOT ✓ "OESPJE,PUMJOTUZMFHVJE

  7. оةࢿਸਤೠ௏٘ஶ߮࣌ଵҊޙࢲ ✓ (PPHMF+BWB$POWFOUJPOT ✓ "041+BWB$POWFOUJPOT ✓ "OESPJE,PUMJOTUZMFHVJE "OESPJE,PUMJOTUZMFHVJEܳଵҊೞݶJGޙٍী઺Қഐ୊ܻী؀೧ࢲഛੋೡࣻ੓णפ׮ ੉ޙࢲ࢚ਵۿূఠܳӝળਵ۽઺Қഐ੄೙ਃࢿਸ঱әೞա ੉ࠗ࠙ب௏٘ஶ߮࣌ਵ۽૑੿೧فחѱજਸ٠೤פ׮

  8. оةࢿਸਤೠ௏٘੿۳ ௏٘੿۳ࠗఠद੘ೞݶજ਷ؘউ٘۽੉٘झౚ٣য়੄ࢸ੿$PEF4UZMFਸࣻ੿ೡࣻ੓णפ׮ +BWB௏٘झఋੌਸ"OESPJE۽ೠߣࢸ੿೧فݶજणפ׮ р഑௏٘झఋੌ੉ࢸ੿উغয੓ח҃਋о੓ਸࣻ੓ਵפ ࢎ੹ীׂ۞઱ݶજणפ׮

  9. оةࢿਸਤೠ௏٘੿۳ فߣ૩۽ח,PUMJO ,PUMJO਷о૑о੓חؘ ࠁా਷୐ߣ૩,PUMJOTUZMFHVJEFܳӝࠄਵ۽ࢎਊೞח٠೤פ׮

  10. оةࢿਸਤೠ௏٘੿۳ 9.-੄҃਋ࢤпࠁ׮੗઱"OESPJE$PEF4UZMF੸ਊ੉উغয੓ח҃਋о݆णפ׮ ࢤпաदݶԙೠߣׂ۞ࢲ੸ਊ೧઱ࣁਃ

  11. Property 사용 ௏٘ஶ߮࣌੉ա੿۳ਸ࢓ಝࠁওחؘ 1SPQFSUZࢎਊߨਸ࢓ಝࠁѷणפ׮

  12. 1SPQFSUZࢎਊ ✓ ,PUMJO߸ࣻח1SPQFSUZܳ੉ਊೞৈೣࣻ୊ۢࢎਊೡࣻب੓׮ WBSQSPQFSUZ/BNF<1SPQFSUZ5ZQF><QSPQFSUZ@JOJUJBMJ[FS> <HFUUFS> <TFUUFS> ࢤпࠁ׮1SPQFSUZܳੜޅࢎਊೞѱغח҃਋о੓णפ׮ ߸ࣻ۽ࢲ੄ഝਊبоמೞҊ $VTUPNHFUUFSTFUUFSٜܳ݅যࢲࢎਊೡࣻ੓ӝٸޙীੜഝਊೣ੉೙ਃ೤פ׮

  13. 1SPQFSUZࢎਊ DMBTT6TFS*OGP\ QSJWBUFWBS@OBNF4USJOH OVMM WBMOBNF4USJOH HFU @OBNFUBLF*G\JUOVMM^  ^ 1SPQFSUZࢎਊীࢲޙઁחহ׮

    ੉௏٘ח1SPQFSUZࢎਊࢿীޙઁоহח௏٘ੑפ׮
  14. 1SPQFSUZࢎਊޙઁ੼ਸٜ݅যࠁ੗ QSJWBUFWBSOBNF-FOHUI*OU QSJWBUFWBSVTF/BNF#PPMFBOGBMTF SFUVSOJG VTF/BNFOPU \ WBMSFU@OBNFUBLF*G\JUOVMM^  OBNF-FOHUISFUMFOHUI VTF/BNFUSVF

    ^FMTF\ 6TFE DMBTT6TFS*OGP\ QSJWBUFWBS@OBNF4USJOH OVMM QSJWBUFWBSOBNF-FOHUI*OU QSJWBUFWBSVTF/BNF#PPMFBOGBMTF WBMOBNF4USJOH HFU \ SFUVSOJG VTF/BNFOPU \ WBMSFU@OBNFUBLF*G\JUOVMM^  OBNF-FOHUISFUMFOHUI VTF/BNFUSVF SFU ^FMTF\ 6TFE ^ ^ ^ Ӓېࢲખ؊ࠂ੟ೞѱޙઁ੼ਸٜ݅যࠁওणפ׮ OBNF੉ۄח1SPQFSUZীOBNF-FOHIU VTF/BNF੉ۄחчਸ୶о೧ࢲHFU/BNFਸೞݶয়ز੘ਸ୶о೧ࠁওणפ׮
  15. 1SPQFSUZࢎਊޙઁ੼ਸٜ݅যࠁ੗ ✓ 1SPQFSUZ੉ܴ੉OBNF੉૑݅ ✓ TJ[Fܳ੷੢ೞҊ੓Ҋ  ✓ VTF/BNF#PPMFBOчా೧ೠߣ݅OBNFܻఢ ױࣽOBNFܻఢਵ۽ࢤпೞҊॵ׮ݶޙઁоࢤӡࣻ੓׮ ৻ࠗীࢲࢎਊೞחੑ੢ীࢲױࣽOBNFਸഐ୹ਸೞݶOBNF੉য়૑ঋҊ׮ܲч੉য়חয়ܨоߊࢤ೤פ׮

    ੉۞ݶOBNF੄੉ܴ݅ঌҊ੓חࢎਊ੗חਗ஖ঋחѾҗܻܳఢ߉ѱغҊ  OBNF੉ۄח1SPQFSUZחࢎप࢚ࢎਊೞ૑ޅೞח߸ࣻоؼࣻ੓ભ
  16. 1SPQFSUZࢎਊदܙ੉೙ਃೞ׮ ✓ 1SPQFSUZоಞೞ׮Ҋೞ૑݅ݽفоز੄ೞחߑߨਸޖदೞ૑ঋইঠೠ׮ ✓ &GGFDUJWF,PUMJO଼ਸӝળਵ۽ ✓ ࢚కܳաకմ׮߸ࣻ 1SPQFSUZ  ✓

    ೯زਸաఋմ׮ೣࣻ &GGFDUJWF,PUMJO଼ਸӝળਵ۽ח 1SPQFSUZח࢚కܳաకաب۾ҳࢿ೧ঠ೤פ׮ খীࢲ੘ࢿೠ௏٘ח߸ࣻоইצೣࣻ੄৉ೡਸೞҊ੓যҳ࠙੉೙ਃ೤פ׮
  17. 1SPQFSUZࢎਊदܙ੉೙ਃೞ׮ GVOHFU0OMZ0OF/BNF 4USJOH JG VTF/BNFOPU \ WBMSFU@OBNFUBLF*G\JUOVMM^  OBNF-FOHUISFUMFOHUI VTF/BNFUSVF

    SFU ^FMTF\ 6TFE ^ খীࢲ੘ࢿೠ1SPQFSUZOBNF੉ইצ ೣࣻ۽੉ܴࠗఠݺഛೞѱ੿੄ೞҊ ࢎਊೞب۾੿ܻೣ੉೙ਃ
  18. Scope Functions فߣ૩۽4DPQFGVODUJPOTਸঌইࠇद׮

  19. 4DPQF'VODUJPOࢎਊ ✓ SVOSFDFJWFSܳֈѹ઱ח҃਋ ✓ XJUIQBSBNFUFS۽ֈѹ઱ח҃਋ ✓ BQQMZSFDFJWFSܳֈѹ઱ח҃਋ ✓ BMTPSFDFJWFSܳֈѹ઱ח҃਋ ✓

    MFUSFDFJWFSܳֈѹ઱ח҃਋ ✓ UBLF*GSFDFJWFSܳֈѹ઱ח҃਋ ✓ UBLF6OMFTTSFDFJWFSܳֈѹ઱ח҃਋ 4DPQFGVODUJPO਷ઙܨо׮নೞҊ чਸযڃधਵ۽੹׳߉Ҋ যځೠч੉ܻఢؼ૑੿೧ઉ੓णפ׮
  20. 4DPQF'VODUJPO೦࢚જਸө EBUBDMBTT*NBHF3FTQPOTF  WBMJNBHF-JTU-JTU*NBHF*UFN3FTQPOTF  WBMOFYU#PPMFBO  EBUBDMBTT*NBHF*UFN3FTQPOTF  WBMJNBHF6SM4USJOH

     WBMJNBHF8JEUI*OU  WBMJNBHF)FJHIU*OU  WBMJNBHF5ZQF4USJOH  ࢲߡ۽ࠗఠ੹׳߉ח׮חо੿ਵ۽JNBHF-JTU৬OFYUী؀ೠ੿ࠁоನೣغয੓חؘ੉ఠܳೞաҳࢿ೮णפ׮ ੉ؘ੉ఠܳഝਊೡٸ4DPQFGVODUJPOਸࢎਊ೧ࠁ۰Ҋೞחؘযڃ੢ױ੼੉੓ח૑ঌইࠁભ
  21. 4DPQF'VODUJPO೦࢚જਸө ✓ ݽف/VMMBCMFчਸӝ߈ਵ۽׮਺੄ઑѤীݏחчਸ଺ইࠁ੗ ✓ ݽٚч੉/PU/VMMੋ҃਋ী݅࢜۽਍EBUBDMBTTܳࢤࢿೞৈ7JFXীࢲࢎਊೠ׮ ࢲߡ۽ࠗఠ੹׳߉ח׮חо੿ਵ۽JNBHF-JTU৬OFYUী؀ೠ੿ࠁоನೣغয੓חؘ੉ఠܳೞաҳࢿ೮णפ׮ ੉ؘ੉ఠܳഝਊೡٸ4DPQFGVODUJPOਸࢎਊ೧ࠁ۰Ҋೞחؘযڃ੢ױ੼੉੓ח૑ঌইࠁભ

  22. 4DPQF'VODUJPO೦࢚જਸө GVOMPBE*NBHF \ JNBHF3FTQPOTFJNBHF-JTU MFU\ JUGPS&BDI\JNBHF JNBHFJNBHF6SM MFU\ JNBHFJNBHF5ZQF MFU\

    JNBHFJNBHF8JEUI MFU\ JNBHFJNBHF)FJHIU MFU\ *NBHF4UBUF  JNBHF6SMJNBHFJNBHF6SM  JNBHF5ZQFJNBHFJNBHF5ZQF  JNBHF8JEUIJNBHFJNBHF8JEUI  JNBHF)FJHIUJNBHFJNBHF)FJHIU   ^ ^ ^ ^ ^ ^ ^ 4DPQFGVODUJPOਸӓঈਵ۽ࢎਊ೧ࠌणפ׮ *G؀नOVMM୓௼ܳೞҊࢎਊೞӝए਍ MFU\^ਸࢎਊ೧ࠁওणפ׮ ݽٚч੉/PU/VMM੐ਸഛੋೞҊ࢜۽਍*NBHF4UBUFٜܳ݅ب۾୊ܻ೮णפ׮
  23. 4DPQF'VODUJPO೦࢚જਸө ൔ൤ࠅࣻ੓ח੢ಿ௏٘оٜ݅য઎חؘ ӭՔೞ૑بjࢎਊࢿ੉֫૑بঋणפ׮

  24. 4DPQF'VODUJPO೦࢚જਸө ✓ ੉੿ب۽೧ঠೠ׮ݶߑߨ਷ѐ ✓ TBGF-FUਸഝਊTUBDL0WFSGMPXଵҊ ✓ ӒրJGޙਸഝਊ IUUQTTUBDLPWFSGMPXDPNRVFTUJPOTNVMUJQMFWBSJBCMFMFUJOLPUMJO 4DPQFGVODUJPOਸഝਊೞחѪ਷જਵա Ҷ੉੷ۧѱ੘ࢿ೧ঠೡө

     ؀উ਷ަө  ѾҴ؀উ਷TUBDL0WFSGMPXীৢۄ৬੓חTBGF-FUਸഝਊೞѢա ӒրJGޙਸࢎਊೞחѪੑפ׮
  25. 4DPQF'VODUJPO೦࢚જਸө GVOMPBE*NBHF \ JNBHF3FTQPOTFJNBHF-JTU MFU\ JUGPS&BDI\JNBHF JG JNBHFJNBHF6SMOVMMJNBHFJNBHF5ZQFOVMMJNBHFJNBHF8JEUI OVMMJNBHFJNBHF)FJHIUOVMM \

    *NBHF4UBUF  JNBHF6SMJNBHFJNBHF6SM  JNBHF5ZQFJNBHFJNBHF5ZQF  JNBHF8JEUIJNBHFJNBHF8JEUI  JNBHF)FJHIUJNBHFJNBHF)FJHIU   ^ ^ ^ ^ ੉҃਋JGܳ੘ࢿೞҊ /PU/VMMੋчਸоઉয়חѱ؊ӭՔ೤פ׮ ௏٘оةࢿب֫ই૑૑ঋҊ ࢎਊࢿبڄয૑ח4DPQF'VODUJPOਸ੉҃਋Ҷ੉ࢎਊೞ૑ঋחಞ੉જભ
  26. 4DPQF'VODUJPO೦࢚જਸө WJFX.PEFMVQEBUF7JFX\ JUQMVT BBBBBB MFU\ UWSVO\ UFYUBCDEJU ^ ^ ^

    it੉ ࢤۚغয ੓׮ it੉ ࢤۚغয ੓׮ This scope ৈӝࢲ ݈ೞח it਷ য٣ੌө? ೠ઴ঀ׮दࠁݶ௏ౣܽ਷ۈ׮಴അীࢲ౵ۄݫఠоѐ੉ݶJUਵ۽؀୓ؾפ׮ ߣ૩઴੄JU਷VQEBUF7JFX੄JU੉Ҋ QMVT੉റMFU਷UWSVO\^উীࢲࢎਊೡJU੉غѷભ ࢎपૣ਷௏٘ۄࢲ߄۽੉೧ೡࣻ੓૑݅ ઺рী઴઴੉ࢎ੉ী੓׮ݶJU੉য٣ࢲࠗఠ৳ח૑ঌӝয۵Ҋ  য٣ࢲחMFU য٣ࢲחSVOਸࢎਊ೧ঠೞח૑ݺഛೞ૑ঋਸࣻ੓णפ׮
  27. 4DPQF'VODUJPOѾҴ ✓ ࢲ۽׮ܲ੉೧بо੓ਸࣻ੓׮ ✓ SVOMFUBQQMZBMTPܳ݃ҳॳѱغݶ੉ч੉য٣ীࢲ৳ח૑ঌࣻহ׮ ✓ ݽٚѤ੸׼൤ ੿ܻೞݶ 4DPQFGVODUJPO੸ਊೞחؘ੓যࢲ۽׮ܲ੉೧بоઓ੤ೡࣻ੓Ҋ 

    ݃ҳॳѱغݶ੉ч੉য٣ীࢲࠗఠ৳ח૑ঌӝоয۵ભ ѾҴݽٚѤ੸׼൤ ঌݏѱ ೙ਃೞ׮ݶ௏٘ஶ߮࣌ਸ੿੄ೞҊࢎਊೞחѦ୶ୌ೤פ׮
  28. Sequence 활용하기

  29. 4FRVFODFഝਊೞӝ੹ী GVOUFTU \ WBMJUFNT*OU3BOHF WBMTVNJUFNT GJMUFS\ QSJOU 'JMUFSJU  ߣ۽Ӓ

    JU ^ NBQ\ QSJOU .BQJU  ߣ۽Ӓ JU  ^ TVN  QSJOUMO TVNTVN  ^ Filter1, Filter2, Filter3, Filter4, Filter5, Filter6, Filter7, Map6, Map7, sum 26 Ѿҗ 4FRVFODFഝਊೞӝ੹ীGJMUFS NBQਸഝਊ೧*OU3BOHFܳঌইࠇפ׮ ੉௏٘੄ز੘Ѿҗחয়ܲଃҗэणפ׮ 'JMUFSܳݢ੷׮ೞҊ NBQਸ੉য୊ܻ೤פ׮
  30. 4FRVFODFഝਊೞӝ੹ী !5FTU QVCMJDGJOBMWPJEUFTU \ CZUFWBS *OU3BOHFJUFNTOFX*OU3BOHF WBS   $PMMFDUJPOEFTUJOBUJPOJWJW

    $PMMFDUJPO OFX"SSBZ-JTU ࢜۽਍ஸۑࢶࢤࢿ ࢤۚ XIJMF WBSIBT/FYU \ JUFNJWJWWBSOFYU  JU /VNCFS JUFNJWJW JOU7BMVF  WBS'JMUFS JU   4ZTUFNPVUQSJOU WBS  JG JU \ࠁ׮௾҃਋BEE EFTUJOBUJPOJWJWBEE JUFNJWJW  ^ ^ ৈӝө૑оGJMUFSܳ୊ܻೠѾҗ ࢜۽਍$PMMFDUJPOਸࢤࢿೠ׮ EFTUJOBUJPOJWJW $PMMFDUJPO OFX"SSBZ-JTU $PMMFDUJPOT,UDPMMFDUJPO4J[F0S%FGBVMU UIJTNBQJW   NBQਸ୊ܻೠ׮ XIJMF WBSIBT/FYU \ JUFNJWJWWBSOFYU  JU /VNCFS JUFNJWJW JOU7BMVF  WBS.BQ JU   4ZTUFNPVUQSJOU WBS  *OUFHFSWBSJU ߓ୊ܻറ੷੢ EFTUJOBUJPOJWJWBEE WBS  ^ ஸ۩࣌੄чਸTVNೠ׮ JOUTVN$PMMFDUJPOT,UTVN0G*OU *UFSBCMF -JTU EFTUJOBUJPOJWJW  4USJOHWBSTVN TVN 4ZTUFNPVUQSJOUMO WBS  ^ ղࠗ௏٘ܳ࢓ಝࠁݶ੉ਬܳঌࣻ੓חؘ  ѐ੄XIJMFޙ੉ઓ੤ೣਸঌࣻ੓णפ׮ ୐ߣ૩חGJMUFS فߣ૩חNBQ੄ؘ੉ఠܳ୊ܻ೤פ׮ ࢎ੉ࢎ੉࢜۽਍$PMMFDUJPOਸ݅٘חѪبഛੋೡࣻ੓णפ׮
  31. 4FRVFODFഝਊೞӝ੹ী GVOUFTU \ WBMTVNJUFNT BT4FRVFODF  GJMUFS\ QSJOU 'JMUFSJU 

     JU ^ NBQ\ QSJOU .BQJU   JU  ^ TVN  ^ // ӝઓ Iterator Filter1, Filter2, Filter3, Filter4, Filter5, Filter6, Filter7, Map6, Map7, sum 26 // sequence Filter1, Filter2, Filter3, Filter4, Filter5, Filter6, Map6, Filter7, Map7, sum 26 Ѿҗ ੉ߣূBT4FRVFODFܳ୶оೞৈѾҗܳ࢓ಝࠁݶ 'JMUFS .BQ੉ࢎ੉ࢎ੉ՙয੓਺ਸঌࣻ੓णפ׮ द௫झоহח҃਋חೞաೞա୊ܻೞ૑݅ BT4FRVFODFܳ୶оೣਵ۽ॄࣽର୊ܻೣਸঌࣻ੓ભ
  32. 4FRVFODFഝਊೞӝ ✓ ؀ਊ۝੄ؘ੉ఠ୊ܻदࢤӡࣻ੓ח୶о-JTUࢤࢿਸߑ૑ೡࣻ੓׮ ✓ ইې੄௏٘৬ਬࢎೠز੘ਸೠ׮ WBSTVN JUFNTGPS&BDI\ QSJOU 'JMUFSJU 

     JG JU \ QSJOU .BQJU   TVNJU  ^ ^ ੉҃਋؀ਊ۝ؘ੉ఠ୊ܻदࢤӡࣻ੓ח୶о-JTUࢤࢿਸߑ૑ೡࣻ੓Ҋ  ࠁాGPSޙೞա۽JGܳ੉ਊ೧୊ܻೞח௏٘৬ਬࢎೠߑߨ੄Ѿҗܳࠅࣻ੓णפ׮
  33. 4FRVFODFоԙજ਷Ѥইפ׮ ✓ ױࣽೠؘ੉ఠܳ4FRVFODFೠ׮Ҋࢿמ੉જই૑חѤইפ׮ ✓ JOMJOFೣࣻ۽಴അغחNBQ GJMUFS١ਸഝਊೞחѱয়൤۰ࢿמ੉જਸࣻ੓׮ ✓ ؘ੉ఠ઺ࠂઁѢ ೙ఠ୊ܻ١ؘ੉ఠоҕ੉݆਷҃਋4FRVFODFоب਑ؼࣻ੓׮ ✓

    ݒߣ࢜۽਍MJTUܳ݅٘חؘٜযоח࠺ਊ੉௼׮ݶ4FRVFODFоજਸࣻ੓׮ Ӓۧ׮Ҋ೦࢚4FRVFODFоજ਷ࢿמਸղחѪ਷ইתפ׮ খীࢲ੘ࢿ೮؍ࢠ೒௏٘ܳӝળਵ۽BT4FRVFODFоয়൤۰؊וܽѾҗܳоઉ৳Ҋ  JOMJOFਸೞחGJMUFSNBQ੄Ѿҗоয়൤۰؊જ਷Ѿҗܳоઉ৳णפ׮ ݒߣ࢜۽਍ܻझ౟ܳ݅٘חؘٜযоח࠺ਊਸ઴੉Ҋर׮ݶBT4FRVFODFоബਯ੸ੌࣻ੓Ҋ ࢿמ୓௼റࢎਊೞदӡj
  34. Coroutines 활용

  35. $PSPVUJOFTഝਊ ✓ SVO#MPDLJOH ✓ SVO#MPDLJOHਸز੘दఃݶ#MPDLJOHदఃҊ׮਺੘সਸ୊ܻೠ׮ ✓ ੘স੉՘աݶز੘दఅࠗ࠙੄#MPDLJOHਸ೧ઁೞҊجইр׮ ✓ (MPCBM4DPQF ✓

    জز੘рױೞա੄4DPQFਸഝਊೠ׮ ✓ ױೞա੄4DPQFਸഝਊೞ׮ࠁפ-JGFDZDMFਸ୊ܻೞӝয۵׮ ✓ $PSPVUJOF4DPQF ✓ -JGFDZDMFਸ୊ܻೞӝऔҊ ࢤࢿҗزदীࢎਊ੉оמೞ׮ উ٘۽੉٘ীࢲഝਊೡѪ੉פ-JGFDZDMFਸੜ૑ఃب۾ѐߊ೧ঠೠ׮ ,PUMJOޙࢲীࠁݶSVO#MPDLJOHਸݒ਋ൔೞѱࠅࣻ੓णפ׮ ӒܻҊࢤпࠁ׮݆਷Ӗҗࢠ೒ীࢲ(MPCBM4DPQFਸൔೞѱࢎਊೞח҃਋о੓חؘ ੉חݽف"OESPJEജ҃җחݏ૑ঋणפ׮ "OESPJEীࢲח-JGFDZDMFਸੜ૑ெѐߊਸ೧ঠ೧$PSPVUJOF4DPQFਸഝਊ೧ঠ೤פ׮ (MPCBM4DPQFҗSVO#MPDLJOH੉যځೠޙઁо੓ח૑ೞաೞա࢓ಝࠁѷणפ׮
  36. runBlocking

  37. SVO#MPDLJOHࢎਊೞӝ DMBTT.BJO7JFX.PEFM7JFX.PEFM \ GVOMPBE SVO#MPDLJOH\ BOESPJEVUJM-PHX 5&.1 5ISFBE\5ISFBEDVSSFOU5ISFBE ^ 

    EFMBZ   ^ ^ SVO#MPDLJOHਸਤ௏٘୊ۢഝਊೠ׮ݶޖटੌ੉ࢤӡөਃ
  38. SVO#MPDLJOHࢎਊदޙઁ੼ ✓ 6*ীࢲSVO#MPDLJOHਸഐ୹ೞݶ6*झா઴۞ܳ#MPDLJOHೞҊز੘ೠ׮ ✓ 6*оݥ୸࢚క۽*0ٚ.BJOٚ੘সਸೞҊ 6*ܳഝࢿചೠ׮ ✓ ੉दр੉ӡয૑ݶ"/3 "QQMJDBUJPO/PU3FTQPOEJOH ੉ߊࢤೠ׮

    ✓ 3FBTPO*OQVUEJTQBUDIJOHUJNFEPVU 8BJUJOHUPTFOEOPOLFZFWFOU CFDBVTFUIFUPVDIFEXJOEPXIBTOPUGJOJTIFEQSPDFTTJOHDFSUBJOJOQVU FWFOUTUIBUXFSFEFMJWFSFEUPJUPWFSNTBHP8BJURVFVFMFOHUI 8BJURVFVFIFBEBHFNT 
 1BSFOUDPNFYBNQMFNZBQQMJDBUJPO.BJO"DUJWJUZ ✓ ѾҴSVO#MPDLJOHਸࢎਊೞ૑ঋইঠೠ׮ উ٘۽੉٘.BJO5ISFBEח6*झா઴۞ੑפ׮SVO#MPDLJOH਷੉੹੄झா઴۞ܳӒ؀۽ࢎਊ೤פ׮ 6*झா઴۞ীࢲ௏٘੘ࢿೞݶ׼োೞѱب6*ীࢲ#MPDLJOHೞҊز੘೤פ׮ SVO#MPDLJOHউীࢲز੘ೞח௏٘о*0ٚ6*࢚ٚҙহणפ׮ੌױ#MPDLJOHറز੘೤פ׮
  39. SVO#MPDLJOHࢎਊदޙઁ੼ ✓ 6*ীࢲSVO#MPDLJOHਸഐ୹ೞݶ6*झா઴۞ܳ#MPDLJOHೞҊز੘ೠ׮ ✓ 6*оݥ୸࢚క۽*0ٚ.BJOٚ੘সਸೞҊ 6*ܳഝࢿചೠ׮ ✓ ੉दр੉ӡয૑ݶ"/3 "QQMJDBUJPO/PU3FTQPOEJOH ੉ߊࢤೠ׮

    ✓ 3FBTPO*OQVUEJTQBUDIJOHUJNFEPVU 8BJUJOHUPTFOEOPOLFZFWFOU CFDBVTFUIFUPVDIFEXJOEPXIBTOPUGJOJTIFEQSPDFTTJOHDFSUBJOJOQVU FWFOUTUIBUXFSFEFMJWFSFEUPJUPWFSNTBHP8BJURVFVFMFOHUI 8BJURVFVFIFBEBHFNT 
 1BSFOUDPNFYBNQMFNZBQQMJDBUJPO.BJO"DUJWJUZ ✓ ѾҴSVO#MPDLJOHਸࢎਊೞ૑ঋইঠೠ׮ Ӓۧ׮Ҋ*0ਤীࢲز੘ೞפޙઁহ׮Ҋࢤпೞ؊ۄب ղࠗ੸ਵ۽(MPCBM4DPQFਸഝਊ೤פ׮ -JGFDZDMFਸੜҙܻೞৈѐߊоמೞ׮ݶjࢎਊೞࣁਃ ׮݅ ׮਺ীঌইࠅ(MPCBM4DPQFਸঌইࠄ׮ݶॳ૑ঋইঠೡ੉ਬחೞա؊୶оؾפ׮
  40. GlobalScope

  41. (MPCBM4DPQFഝਊ GVOMPBE(MPCBM (MPCBM4DPQFMBVODI\ BOESPJEVUJM-PHX 5&.1 5ISFBE\5ISFBEDVSSFOU5ISFBE ^  DPVOU 

    EFMBZ   MBVODI %JTQBUDIFST.BJO \ VQEBUF7JFX DPVOUDPVOU5ISFBE\5ISFBEDVSSFOU5ISFBE ^  ^ ^ (MPCBM4DPQFਸഝਊೞӝਤೠࢠ೒ੑפ׮
  42. (MPCBM4DPQFࢎਊदޙઁ੼ ✓ (MPCBM4DPQF਷জز੘઺ೞա݅ࢤࢿغחयӖహ PCKFDUDMBTT  ✓ (MPCBM4DPQF਷ചݶױਤ۽ز੘೧ঠೞח"OESPJE৬חݏ૑חঋ਺ ✓ -JGFDZDMFਸ୊ܻೞӝਤ೧ࢲ߹بҙܻ੘সਸ೧ঠೠ׮ ✓

    ചݶױਤ۽$PSPVUJOF4DPQFਸഝਊೞחಞ੉ҙܻೞӝ؊औ׮ ✓ য়ܨ୊ܻח$PSPVUJOF4DPQFҗزੌೞ׮ ✓ 4VQFSWJTJPS+PC  $PSPVUJOF&YDFQUJPO)BOEMFSਸMBVODIীࢎਊ ✓ ୡӝ$POUFYUо&NQUZ$PSPVUJOF$POUFYU۽೦࢚ୡӝചغয੓׮ ✓ DPOUFYU߸҃਷MBVODI۽୊ܻ ✓ OFX$PSPVUJOF$POUFYUܳ੉ਊೞৈ߸҃ (MPCBM4DPQF਷$PSPVUJOF4DPQFਸ࢚ࣘ߉חयӖహੑפ׮ $PSPUVJOF4DPQFਸ૒੽ٜ݅যࢎਊೞ૑ঋח؀ࠗ࠙੄௏٘ীࢲ(MPCBM4DPQਸOFX$PSPVUJOF$POUFYUܳࢤࢿ೧ࢎਊ೤פ׮ यӖహ੉ۄח݈਷জ੉ز੘ೞח୊਺ࠗఠ՘ө૑৔ೱਸ޷஖ݴ ੜޅ׮ܖݶݫݽܻܼ੄ߊࢤبоמೞҊ জ੄ઙܐبੌযզࣻ੓णפ׮
  43. (MPCBM4DPQFয়ܨ୊ܻח ✓ 4VQFSWJTPS+PC ✓ &YDFQUJPOਸ࢚ਤQBSFOUীѱా૑ೞ૑ঋח׮ѾҴDIJMEٜীࢲߊࢤೠ &YDFQUJPO੉׮ܲDIJMEী৔ೱਸ઱૑ঋח׮ ✓ $PSPVUJOF&YDFQUJPO)BOEMFS ✓ &YDFQUJPOਸ߉ই୊ܻೠ׮

  44. (MPCBM4DPQFয়ܨ୊ܻח GVOMPBE(MPCBM (MPCBM4DPQFMBVODI FYDFQUJPO 4VQFSWJTPS+PC \ ࢤۚ (MPCBM4DPQFMBVODI\ ࢤۚ ^

    UISPX&YDFQUJPO &SSPS  ࢤۚ ^ QSJWBUFWBMFYDFQUJPO$PSPVUJOF&YDFQUJPO)BOEMFS\DPSPVUJOF$POUFYU UISPXBCMF ৈӝࢲ৘৻୊ܻ ^ р഑ਤ௏٘୊ٜۢ݅যࢲॳݶজ੄ز੘ী৔ೱਸ޷஖૑ঋਸөࢤпೡࣻ੓णפ׮ ೞ૑݅੉௏٘ח୽࠙൤पࣻೡࣻ੓णפ׮־ҵо־ۅೡࣻ੓ਵפ ࢎਊೞ૑ঋחѱજѷणפ׮
  45. (MPCBM4DPQFয়ܨ୊ܻח ✓ ੉ۧѱ୶оೞחѤ־ҵоपࣻೞӝऔ׮ ✓ য়ےदрߔӒۄ਍٘۽(MPCBM4DPQFਸ୊ܻೞ׮য়ܨоߊࢤೡٸয়ܨ୊ܻܳೞ૑ ঋও׮ݶز੘઺લਸࣻ੓׮ ""$7JFX.PEFMҗ$PSPVUJOF4DPQFਸࢎਊೞחѦ୶ୌೠ׮ ੉۠ࠗ࠙਷ੜޅػѾҗޛਸٜ݅Ҋ জী৔ೱب޷சࣻ੓णפ׮ ೲਊೞ૑ঋইঠೞݴ

    ੉޷ੜٜ݅য૓""$7JFX.PEFM੄$PSPVUJOF4DPQFਸഝਊೞदӡ߄ۉפ׮
  46. AAC-ViewModel 
 CoroutineScope

  47. ""$7JFX.PEFM$PSPVUJOF4DPQFഝਊ GVOMPBE7JFX.PEFM4DPQF WJFX.PEFM4DPQFMBVODI FYDFQUJPO \ BOESPJEVUJM-PHX 5&.1 5ISFBE\5ISFBEDVSSFOU5ISFBE ^ 

    DPVOU  MBVODI\ EFMBZ   VQEBUF7JFX DPVOUDPVOU5ISFBE\5ISFBEDVSSFOU5ISFBE ^  ^ MBVODI\ EFMBZ   UISPX&YDFQUJPO &SSPS  ^ BOESPJEVUJM-PHF 5&.1 EFMBZ  VQEBUF7JFX DPVOUDPVOU5ISFBE\5ISFBEDVSSFOU5ISFBE ^  ^ QSJWBUFWBMFYDFQUJPO$PSPVUJOF&YDFQUJPO)BOEMFS\DPSPVUJOF$POUFYU UISPXBCMF ৈӝࢲ৘৻୊ܻ ^
  48. ""$7JFX.PEFMഝਊղࠗ௏٘ WBM7JFX.PEFMWJFX.PEFM4DPQF$PSPVUJOF4DPQF HFU \ WBMTDPQF$PSPVUJOF4DPQF UIJTHFU5BH +0#@,&:  JG TDPQFOVMM

    \ SFUVSOTDPQF ^ SFUVSOTFU5BH*G"CTFOU +0#@,&:  $MPTFBCMF$PSPVUJOF4DPQF 4VQFSWJTPS+PC  %JTQBUDIFST.BJOJNNFEJBUF  ^ JOUFSOBMDMBTT$MPTFBCMF$PSPVUJOF4DPQF DPOUFYU$PSPVUJOF$POUFYU $MPTFBCMF $PSPVUJOF4DPQF\ PWFSSJEFWBMDPSPVUJOF$POUFYU$PSPVUJOF$POUFYUDPOUFYU PWFSSJEFGVODMPTF \ DPSPVUJOF$POUFYUDBODFM  ^ ^ 7JFX.PEFM4DPQF਷ղࠗী੉৬э਷௏٘ܳ׸Ҋ੓णפ׮ 4VQFSWJTPS+PCਸୡӝചೞҊ੓য DIJME੄੘স੄&YDFQUJPO੉1BSFOUী৔ೱਸ޷஖૑ঋҊ  %JTQBUDIFST.BJOझா઴۞ܳࢎਊೞҊ੓णפ׮
  49. $PSPVUJOF3FUSPGJUഝਊীࢲ GVOMPBE%BUB WJFX.PEFM4DPQFMBVODI\ XJUI$POUFYU %JTQBUDIFST*0 \ MPBESFUSPGJUEBUB ^ ^ GVOMPBE%BUB

    WJFX.PEFM4DPQFMBVODI\ MPBESFUSPGJUEBUB ^ ✓ XJUI$POUFYUоࢎपࠛ೙ਃೞ׮ ✓ 3FUSPGJUղࠗীࢲ*0झா઴۞ܳ੸ਊغয੓য ইې୊ۢ੘স೧بޙઁহ׮ 3FUSPGJUഝਊदীחXJUI$POUFYU۽*0झா઴۞ܳࢎਊೡ೙ਃоহणפ׮ ੉޷3FUSPGJUীࢲ*0झா઴۞ܳࠁ੢೧઱Ҋ੓णפ׮ ݅ড*0о೙ਃೠ҃਋ۄݶղࠗীࢲ۽ஸநदܳࢤࢿೞѢա ؘ੉ఠ୊ܻীࠗ׸੉غחࠗ࠙੉ߊࢤೞח҃਋ࢎਊೞࣁਃ ৘ (40/ஶߡ౴ਸ૒੽ೠ׮ ۽ஸநदܳ݅ٚ׮١
  50. The end ੉ߣߊ಴חৈӝө૑੉Ҋ ٜয઱दҊࠊ઱࣊ࢲхࢎ೤פ׮ ؊݆਷ղਊ਷#MPHܳా೧੿ܻೞҊ੓ਵפଵҊೞࣁਃ IUUQTUIEFWUFDI

  51. 여기서부터 보너스 ੉ࠗ࠙਷ߊ಴ীನೣೞ૑ঋওਵա ղਊਸࢎ੹ীળ࠺೧فয୶о۽ҕਬ೤פ׮ ೧׼ࠗ࠙ীաৡղਊ਷࠶۽Ӓܳా೧ҕਬೡ৘੿੉޲۽ ଵҊೞࣁਃ

  52. Data class의 equals/hashCode ߊ಴ীחহחղਊ

  53. %BUBDMBTT ✓ FRVBMT IBTI$PEF  ✓ UP4USJOH ઁҕ ✓ DPNQPOFOU/

    ೣࣻઁҕਵ۽ࢶ঱ࣽࢲ؀۽чਸDPNQPOFOU/ਵ۽ࢎਊоמ ✓ DPQZ ೣࣻܳઁҕೠ׮ ߊ಴ীחহחղਊ EBUBDMBTTחFRVBMT৬IBTI$PEF DPNQPOFOU/ DPQZܳ੗زਵ۽ٜ݅যસפ׮ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@
  54. FRVBMT৬IBTI$PEF ✓ +BWB0CKFDUݺࣁীٮܲFRVBMTIBTI$PEF੿੄ ✓ $MBTTীFRVBMTܳ੿੄೮׮ݶ ߈٘दIBTI$PEFب੤੿੄೧ঠೠ׮ ✓ ѐё୓੄FRVBMTоزੌೞ׮ݶ߈٘दAIBTI$PEFAبزੌೠч੉ܻఢغযঠ ೠ׮ ✓

    ੉۠ઑѤਸ૑ః૑ঋਸ҃਋)BTI.BQ )BTI4FU١੄ஸ۩࣌ࢎਊदޙઁоࢤӡ ࣻ੓׮ ߊ಴ীחহחղਊ +BWB0CKFDUݺࣁীٮۄFRVBMTIBTI$PEF੿੄ח੉ղਊҗэભ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@
  55. FRVBMT৬IBTI$PEF૒੽ҳഅद EBUBDMBTT4PNFUIJOH3FTQPOTF  WBMOBNF4USJOH  WBMBHF*OU \ PWFSSJEFGVOIBTI$PEF *OU\ SFUVSO

    OBNF IBTI$PEF     BHF   ^ PWFSSJEFGVOFRVBMT PUIFS"OZ #PPMFBO\ SFUVSOJG UIJTPUIFS \ JG PUIFSJT4PNFUIJOH3FTQPOTF \ WBM OBNF BHF PUIFS SFUVSO*OUSJOTJDTBSF&RVBM OBNF BHF  ^ GBMTF ^FMTF\ USVF ^ ^ ^ ߊ಴ীחহחղਊ ૒੽IBTI$PEF FRVBMTܳҳഅೠ׮ݶਤ௏٘৬эणפ׮ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@
  56. FRVBMT৬ݫݽܻ࠺Үߑߨ ✓ +BWBחইې৬э੉࠺Үೠ׮ ✓ FRVBMTч੉زੌೠ૑୓௼ೠ׮ ✓ ݫݽܻ࢚زੌೠё୓ੋ૑୓௼ೠ׮ ✓ LPUMJOחইې৬э੉࠺Үೠ׮ ✓

    ч੉زੌೠ૑୓௼ೠ׮ ✓ ݫݽܻ࢚زੌೠ૑୓௼ೠ׮ ߊ಴ীחহחղਊ FRVBMT৬ݫݽܻ࠺Үח ਸࢎਊ೤פ׮ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@
  57. FRVBMT৬ݫݽܻ࠺Үߑߨ GVOTUSJOH.FNPSZ \ WBMTPNFUIJOH*UFN0OF4PNFUIJOH3FTQPOTF  OBNFOBNF  BHF  JT4FMFDUFEGBMTF

      WBMTPNFUIJOH*UFN5XP4PNFUIJOH3FTQPOTF  OBNFOBNF  BHF  JT4FMFDUFEGBMTF   QSJOUMO TPNFUIJOH*UFN0OFTPNFUIJOH*UFN5XP\TPNFUIJOH*UFN0OFTPNFUIJOH*UFN5XP^  QSJOUMO TPNFUIJOH*UFN0OFTPNFUIJOH*UFN5XP\TPNFUIJOH*UFN0OFTPNFUIJOH*UFN5XP^  QSJOUMO TPNFUIJOH*UFN0OFIBTI$PEF\TPNFUIJOH*UFN0OFIBTI$PEF ^  QSJOUMO TPNFUIJOH*UFN5XPIBTI$PEF\TPNFUIJOH*UFN5XPIBTI$PEF ^  ^ somethingItemOne == somethingItemTwo true somethingItemOne === somethingItemTwo false somethingItemOne hashCode -1052833319 somethingItemTwo hashCode -1052833319 Ѿҗ ߊ಴ীחহחղਊ LPUMJO੄EBUBDMBTTܳഝਊೣਵ۽ॄਤ৬э਷Ѿҗܳ঳ਸࣻ੓णפ׮ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@
  58. Data class 정의를 DiffUtil에서 활용 ߊ಴ীחহחղਊ ੉ܳ੉ਊ೧3FDZDMFS7JFX੄%JGG6UJMীࢲ੄рױೞѱഛੋೡࣻ੓णפ׮ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@

  59. %JGG6UJMীࢲഝਊೠ׮ݶ QSJWBUFDMBTT%JGG  QSJWBUFWBMPME*UFNT-JTU4FMFDU*UFN  QSJWBUFWBMOFX*UFNT-JTU4FMFDU*UFN %JGG6UJM$BMMCBDL \ PWFSSJEFGVOHFU0ME-JTU4J[F *OU

    PME*UFNTTJ[F PWFSSJEFGVOHFU/FX-JTU4J[F *OU OFX*UFNTTJ[F PWFSSJEFGVOBSF*UFNT5IF4BNF PME*UFN1PTJUJPO*OU OFX*UFN1PTJUJPO*OU  #PPMFBO\ WBMPME*UFNPME*UFNT<PME*UFN1PTJUJPO> WBMOFX*UFNOFX*UFNT<OFX*UFN1PTJUJPO> SFUVSOPME*UFNOFX*UFN ^ PWFSSJEFGVOBSF$POUFOUT5IF4BNF PME*UFN1PTJUJPO*OU OFX*UFN1PTJUJPO*OU  #PPMFBO\ WBMPME*UFNPME*UFNT<PME*UFN1PTJUJPO> WBMOFX*UFNOFX*UFNT<OFX*UFN1PTJUJPO> SFUVSOPME*UFNOFX*UFN ^ ^ ߊ಴ীחহחղਊ ੉௏٘੄Ѿҗחӯ߅ѢܻחѾҗܳࠅࣻ੓णפ׮੗ࣁೠղਊ਷ইې࠶۽Ӓܳా೧ഛੋೞࣁਃ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@
  60. %JGG6UJMীࢲഝਊೠ׮ݶ QSJWBUFDMBTT%JGG  QSJWBUFWBMPME*UFNT-JTU4FMFDU*UFN  QSJWBUFWBMOFX*UFNT-JTU4FMFDU*UFN %JGG6UJM$BMMCBDL \ PWFSSJEFGVOHFU0ME-JTU4J[F *OU

    PME*UFNTTJ[F PWFSSJEFGVOHFU/FX-JTU4J[F *OU OFX*UFNTTJ[F PWFSSJEFGVOBSF*UFNT5IF4BNF PME*UFN1PTJUJPO*OU OFX*UFN1PTJUJPO*OU  #PPMFBO\ WBMPME*UFNPME*UFNT<PME*UFN1PTJUJPO> WBMOFX*UFNOFX*UFNT<OFX*UFN1PTJUJPO> SFUVSOPME*UFNUJUMFOFX*UFNUJUMF ^ PWFSSJEFGVOBSF$POUFOUT5IF4BNF PME*UFN1PTJUJPO*OU OFX*UFN1PTJUJPO*OU  #PPMFBO\ WBMPME*UFNPME*UFNT<PME*UFN1PTJUJPO> WBMOFX*UFNOFX*UFNT<OFX*UFN1PTJUJPO> SFUVSOPME*UFNOFX*UFN ^ ^ ߊ಴ীחহחղਊ ੉௏٘חখীࢲӯ߅Ѣܻ؍ࠗ࠙ਸࣻ੿ೞ৓णפ׮੗ࣁೠղਊ਷ইې࠶۽Ӓܳా೧ഛੋೞࣁਃ IUUQTUIEFWUFDILPUMJOLPUMJO@FGGFDUJWF@
  61. inline 활용하기 ߊ಴ীחহחղਊ

  62. JOMJOFഝਊೞӝ ✓ JOMJOFMBNCEBTध಴അਸೣԋೞחFYUFOTJPOীࢲ੊ݺ௿ېझࢤࢿ࠺ਊਸ઴ੌ ࣻ੓׮ ✓ OPJOMJOFMBNCEBTध಴അীࢲೣԋࢎਊਸೞ૑݅ ੉ೣࣻীࢲഐ୹ೞחೣࣻо JOMJOF੉ইצ҃਋ীࠢৈঠೠ׮ ✓ DSPTTJOMJOFMBNCEBTध಴അਸCMPDL\^ഋక۽ࢎਊೡٸࢎਊೡࣻ੓׮

    ߊ಴ীחহחղਊ
  63. JOMJOFഝਊೞӝ JOMJOFGVOMPBE%BUB  MPBE$BDIF#PPMFBO  OPJOMJOFPO-PBEFE 6OJU  DSPTTJOMJOFPO$BDIF 6OJU

    \ JG MPBE$BDIFOPU \ SVO/FUXPSL POMJOF PO-PBEFE  ^FMTF\ SVO/FUXPSL MPDBM  \ PO-PBEFE  DBDIF PO$BDIF  ^ ^ ^ GVOSVO/FUXPSL VSM4USJOH DBMMCBDL 6OJU \  ^ inlineਵ۽ ੊ݺ ೣࣻ ࢤࢿ ࠺ਊਸ ઴ੋ׮ inline੉ ইצ ೣࣻ ഐ୹ী ࢎਊೞӝ ਤ೧ noinline ഝਊ lambdas ध ಴അ উীࢲ ࢎਊೞӝ ਤ೧ crossinline ഝਊ ߊ಴ীחহחղਊ ࢠ೒௏٘ܳా೧JOMJOFҗDMPTFJOMJOF OPJOMJOF੄ഝਊبܳࠅࣻ੓णפ׮
  64. JOMJOFഝਊೞӝ ✓ *OMJOF੿੄۽੊ݺೣࣻࢤࢿ࠺ਊਸ઴ੌࣻ੓যബਯࢿ੉֫ই૓׮ ✓ Ӓۢੌ߈ೣࣻীࢲبബҗܳࠅࣻ੓ਸө  ✓ ੌ߈ೣٜࣻ਷+7.௏٘प೯࠙ࢳਸా೧о੢੉੊੉غחߑߨਵ۽JOMJOFೠ׮ Ӓۡࣻبইקࣻب੓׮ "OESPJETUVEJPীࢲ੸ਊदڰח҃Ҋݫद૑

    &YQFDUFEQFSGPSNBODFJNQBDUGSPNJOMJOJOHJTJOTJHOJGJDBOU *OMJOJOHXPSLTCFTUGPSGVODUJPOTXJUIQBSBNFUFSTPGGVODUJPOBMUZQFT ߊ಴ীחহחղਊ ԙJOMJOF੉೙ਃೠѪ਷ইתפ׮ +7.ীࢲ௏٘࠙ࢳਸా೧ബਯ੸ੋߑߨਵ۽JOMJOFਸ೧઱ӝٸޙীԙJOMJOFਸೡ೙ਃחহਵݴ ੜҳ࠙ೞৈࢎਊೞदӡ