Global, Static ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์‚ฌ์šฉ์‹œ์— ์ดˆ๊ธฐํ™” ๋˜๋Š” ๋ฐฉ๋ฒ•

eager

  • ์•ฑ ์‹œ์ž‘์‹œ ์ƒ์„ฑ๋จ
  • ์žฅ์ 
    • ๋‹จ์ˆœํ•˜๋‹ค.
    • data race ๋ฌธ์ œ ์—†๋‹ค.
  • ๋‹จ์ 
    • ์ดˆ๊ธฐ ๋กœ๋”ฉ์‹œ ๋Š๋ฆฌ๋‹ค.

lazy

  • ์‚ฌ์šฉ์‹œ์— ์ดˆ๊ธฐํ™”๋จ
  • ์žฅ์ 
    • ์ดˆ๊ธฐ ๋กœ๋”ฉ์‹œ ํ•„์š”์—†๋Š” ๊ฒƒ๋“ค์„ ๋กœ๋”ฉํ•˜์ง€ ์•Š์•„ ๋น ๋ฅด๋‹ค.
  • ๋‹จ์ 
    • Data race๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ์–ด๋Š ์Šค๋ ˆ๋“œ์—์„œ ์ดˆ๊ธฐ์ ‘๊ทผํ•˜์—ฌ ์ƒ์„ฑ๋ ์ง€ ์•Œ์ˆ˜๊ฐ€ ์—†๋‹ค.
    • ์ƒ์„ฑ๋˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ 2๊ฐœ์ด์ƒ์ธ๋ฐ, ๋™์‹œ์— ์ ‘๊ทผํ•œ๋‹ค๋ฉด crash๋‹ค.

Apple์—์„œ๋Š”..

  • C, Objective C โ†’ eager initialization
  • Swift โ†’ lazy initialization

Data race ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ?

  • ๋‘๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ์ ‘๊ทผ ํ•œ ๊ฒฝ์šฐ
  • ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ๋งŒ ์ดˆ๊ธฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ๋Š” blockํ•˜๊ณ , ๋Œ€๊ธฐํ•œ๋‹ค.