[TIL] 2024. 08. 28

2024. 8. 28. 23:46ยทTIL (Today I Learned)
๐Ÿ”ฅ ํ‚ค์›Œ๋“œ
     - App LifeCycle
     - Memory
     - ARC
     - Concurrency

 

๐Ÿ”ฅ ์˜ˆ์ƒ ์งˆ๋ฌธ์ง€

  1. AppDelegate์™€ SceneDelegate์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • AppDelegate๋Š” ์•ฑ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํ‘ธ์‹œ ์•Œ๋ฆผ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ, URL ์Šคํ‚ด ์ฒ˜๋ฆฌ ๋“ฑ ์ „๋ฐ˜์ ์ธ ์•ฑ์˜ ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. iOS 13๋ถ€ํ„ฐ๋Š” SceneDelegate๊ฐ€ ๋„์ž…๋˜์–ด ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ ๊ฐ ์œˆ๋„์šฐ(๋˜๋Š” ์žฅ๋ฉด)์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, AppDelegate๋Š” ์•ฑ ์ˆ˜์ค€์—์„œ์˜ ๊ด€๋ฆฌ ์—ญํ• ์„ ๋งก๊ณ , SceneDelegate๋Š” ๊ฐ๊ฐ์˜ UI ์žฅ๋ฉด(์œˆ๋„์šฐ)์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. Scene Delegate์˜ Life Cycle์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • SceneDelegate๋Š” ๊ฐ Scene์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์ƒ๋ช… ์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
      • scene(_:willConnectTo:options:): ์ƒˆ๋กœ์šด Scene์ด ์—ฐ๊ฒฐ๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. UI๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
      • sceneDidBecomeActive(_:): Scene์ด ํ™œ์„ฑํ™”๋˜์–ด ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • sceneWillResignActive(_:): Scene์ด ๋น„ํ™œ์„ฑํ™”๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ „ํ™”๊ฐ€ ์˜ค๊ฑฐ๋‚˜ ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ „ํ™˜๋˜๊ธฐ ์ง์ „ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
      • sceneWillEnterForeground(_:): Scene์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํฌ์–ด๊ทธ๋ผ์šด๋“œ๋กœ ์ „ํ™˜๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • sceneDidEnterBackground(_:): Scene์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ „ํ™˜๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค.
  3. iOS ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • iOS์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ๋„ค ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:
      • Stack: ์ง€์—ญ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋“ฑ ์ผ์‹œ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
      • Heap: ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ, ๊ฐ์ฒด๋‚˜ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
      • Data Segment: ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ ๋ณ€์ˆ˜์™€ static ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.
      • Code Segment (Text Segment): ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค.
  4. ARC์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • ARC(Automatic Reference Counting)๋Š” Swift์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋™์œผ๋กœ ํ•ด์ œํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ARC๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ ํšŸ์ˆ˜๋ฅผ ์ถ”์ ํ•˜๋ฉฐ, ์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  5. ARC์˜ ๋™์ž‘๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • ARC๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค:
      • ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 1๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
      • ๋‹ค๋ฅธ ๊ฐ์ฒด๋‚˜ ๋ณ€์ˆ˜์—์„œ ์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
      • ์ฐธ์กฐ๊ฐ€ ํ•ด์ œ๋˜๊ฑฐ๋‚˜ ๊ฐ์ฒด๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.
      • ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๋ฉด ๊ฐ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.
  6. Memory Leak์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • Memory Leak์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ตญ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ์ €ํ•˜๋‚˜ ํฌ๋ž˜์‹œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ARC์—์„œ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ(Strong Reference Cycle)๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  7. ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ(Strong Reference Cycle)๋Š” ๋‘ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ๋ฅผ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์–ด ARC๊ฐ€ ์ด ๊ฐ์ฒด๋“ค์„ ํ•ด์ œํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  8. ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ๋Š” ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์˜ˆ์‹œ๋ฅผ ํ•˜๋‚˜ ๋“ค์–ด์ฃผ์„ธ์š”.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ž˜์Šค A์™€ ํด๋ž˜์Šค B๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ํด๋ž˜์Šค A์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํด๋ž˜์Šค B๋ฅผ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๊ณ , ํด๋ž˜์Šค B์˜ ์ธ์Šคํ„ด์Šค๋„ ํด๋ž˜์Šค A๋ฅผ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๋ฉด ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋‘ ๊ฐ์ฒด ๋ชจ๋‘ ํ•ด์ œ๋˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

     
  9. ๋ฉ”๋ชจ๋ฆฌ๋ฆญ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • ๋ฉ”๋ชจ๋ฆฌ๋ฆญ(Memory Leak)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์„œ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜์˜ ์ฐธ์กฐ๋ฅผ weak ๋˜๋Š” unowned๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ARC๊ฐ€ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ œ๋Œ€๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. weak ์ฐธ์กฐ๋Š” ๊ฐ์ฒด๊ฐ€ nil์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ณ , unowned ์ฐธ์กฐ๋Š” ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ ์ค‘์— ํ•ญ์ƒ ์œ ํšจํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  10. weak, unowned์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • weak: ์•ฝํ•œ ์ฐธ์กฐ๋กœ, ARC์—์„œ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. weak ์ฐธ์กฐ๋Š” ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ๋•Œ ์ž๋™์œผ๋กœ nil๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ weak ์ฐธ์กฐ๋Š” ํ•ญ์ƒ Optional ํƒ€์ž…์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • unowned: ๋น„์†Œ์œ  ์ฐธ์กฐ๋กœ, ARC์—์„œ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š์ง€๋งŒ, ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์–ด๋„ nil๋กœ ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. unowned ์ฐธ์กฐ๋Š” ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ํ•ญ์ƒ ์œ ํšจํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. unowned ์ฐธ์กฐ๋Š” Optional์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  11. GCD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ background thread์—์„œ UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด ์–ด๋–ค์ผ์ด ๋ฐœ์ƒํ•˜๋‚˜์š”?
    • iOS์—์„œ UI ์—…๋ฐ์ดํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. GCD(Grand Central Dispatch)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•˜๋ฉด, UI์˜ ๋ถˆ์•ˆ์ •ํ•œ ๋™์ž‘์ด๋‚˜ ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UI ๋ณ€๊ฒฝ์€ ๋ฉ”์ธ ํ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  12. GCD์—์„œ Serial Queue, Concurrent Queue์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • Serial Queue: ์ž‘์—…์„ ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ž‘์—…์ด ์ฐจ๋ก€๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
    • Concurrent Queue: ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ด ์‹œ์ž‘๋œ ์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€๋งŒ, ์™„๋ฃŒ๋˜๋Š” ์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  13. GCD์—์„œ sync์™€ async์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • sync: ๋™๊ธฐ ์‹คํ–‰์œผ๋กœ, ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„์—์•ผ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • async: ๋น„๋™๊ธฐ ์‹คํ–‰์œผ๋กœ, ์ž‘์—…์„ ์‹œ์ž‘ํ•œ ํ›„ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฆ‰์‹œ ๋‹ค์Œ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋ก๋˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. async๋Š” ์ฃผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

class A {
    var b: B?
}

class B {
    var a: A?
}

let aInstance = A()
let bInstance = B()

aInstance.b = bInstance
bInstance.a = aInstance

 

๋ฐ˜์‘ํ˜•

'TIL (Today I Learned)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] 2024. 08. 30  (0) 2024.09.02
[TIL] 2024. 08. 29  (0) 2024.08.29
[TIL] 2024. 08. 27  (0) 2024.08.28
[TIL] 2024. 08. 26  (0) 2024.08.26
[TIL] 2024. 08. 23  (0) 2024.08.23
'TIL (Today I Learned)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL] 2024. 08. 30
  • [TIL] 2024. 08. 29
  • [TIL] 2024. 08. 27
  • [TIL] 2024. 08. 26
DongDong_
DongDong_
  • DongDong_
    how-dev
    DongDong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (102)
      • TIL (Today I Learned) (96)
      • DEV (0)
        • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
        • SWIFT (0)
      • ์‚ฌ์ „์บ ํ”„ ๋ฐ์ผ๋ฆฌ ๋ฏธ์…˜ (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์ž‘์„ฑ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
DongDong_
[TIL] 2024. 08. 28
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”