Trouble Shooting - ์ฑ๊ธํด ์ธ์คํด์ค์ ์ด๊ธฐํ ์์
์ผ๋จ ๋จธ๋ฆฌ๋ถํฐ ๋ฐ๊ณ ์์ํ๊ฒ ์ด๋๋ค.............
์๋๋ฉด... ์ ์ ์ผ๋ ํ๋กํผํฐ ์ด๊ธฐํ ๊ด๋ จ ์ด์ ํด๊ฒฐ๊ธฐ์ ๋ํ ๊ธ์์ ์๋ชป๋ ์ ์ ์ฐพ์๊ฐ์ง๊ตฌ... ์ ์ ํ๊ณ ์... ๋ค์ ๊ธ์ ์ฐ๊ฒ ๋๊ธฐ ๋๋ฌธ..
ํํ ๋ธ๋ก๊ทธ์ ์ ๋์ ๋ ์ ๋งคํ ์ ๋ณด๋,, ์ ๋ชจ๋ฅด๋ ๊ฒ์ ๋ํด์๋ ์ฐ์ง๋ง์! ๋ผ๋ ์๊ฐ์ผ๋ก ์ ๋ฆฌ๋ฅผ ํด์์๋๋ฐ
ํ๋ฒ๋ง ๋ด์ฃผ์ญ์
์.. TIL์ ๋ด์ฃผ์ธ์ฌ...
๋ค์ ์ ์ ๋ค์ด๊ฐ๊ฒ ์ต๋๋ค..
์ ๋ฒ์ ๋๋ฒ๊น ํ์๋ ์ค๋ฅ ์ํฉ์ ๋ค์ ๊ฐ์ ธ์ค์๋ฉด!!
์ด๋ผ๋ผ ๋ฐํ์์ ์๋ฌ๊ฐ ๋ฐ์ํด ๊ฐ์ ์ข ๋ฃ๊ฐ ๋๋ค์..
์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด๋ ๋ฉ์ธ ์ค๋ ๋์์ ๋ฐ์ํ๊ณ ,, ์ผ์ชฝ ์ฝ ์คํ์ ๋ณด๋ฉด,, ํด๋์ค.init() or ๊ตฌ์กฐ์ฒด.init() ์ด ๋จ๋๊ฑธ ๋ณด๋ ์ด๊ธฐํ ์์ ๊ณผ ๊ด๋ จํ ์๋ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค!
์ด๋ค ์ธ์คํด์ค๊ฐ ์ด๊ธฐํ ๋๊ธฐ ์ ์ ์ ๊ทผ์ ํด์ฃผ๊ณ ์๋ ๋ฏ ํ๋ค์,, ์ฐพ์๋ด ์๋ค ,,
์ผ๋จ ์ฒ์์ GamePlayer.shared.~ ๋ก ์ ๊ทผํ์ ๋ ์๋ฌด ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์์๋ ์ด์ ๋?
๋ฐ๋ก๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ shared๋ฅผ staticํ๊ฒ ์ ์ธํด๋์๊ธฐ ๋๋ฌธ!!
Swift์์ static์ ์ฌ์ฉํด ํ์ ํ๋กํผํฐ๋ก ์ธ์คํด์ค๋ฅผ ์ ์ญ์ ์ผ๋ก ์์ฑํ๋ฉด, ์ฌ์ฉ ์์ ์ ์ด๊ธฐํ๊ฐ ๋จ!!!
์ฆ, lazy ํ๊ฒ ์ด๊ธฐํ๋๋ค๋ ์ ..๊ฐ์ฒด์ ์ ๊ทผํ ๋ ์ด๊ธฐํ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค! shared์ ์ฒ์ ์ ๊ทผํ ๋ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง!!
๊ทธ๋์ ์ฌ๊ธฐ์ ๊ธฐ์ GamePlayer.shared.~๋ฅผ ํธ์ถํด๋ ์ด๊ธฐํ ์์ ์์ ๋ฌธ์ ๊ฐ ์์๋ ๊ฒ!!!
+ Swift์์๋ dispatch_once ๋ก ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์๋ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ํ๋ฒ๋ง ์ด๊ธฐํ๋๋ ๊ฒ์ ๋ณด์ฅํจ!!
์ฆ, Thread-Safeํ๊ฒ ์ด๊ธฐํ๊ฐ ๋๋ค! (์ด๊ฑด ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ก ์์๋ก์๋ค.. ์ง๊ธ ์ํฉ๊ณผ๋ ์๊ดX)
์ฌ๊ธฐ๊น์ง๋ ๋ถ์์ด ๋ง์ต๋๋ค!!
But, ๋ฌธ์ ์ํฉ์ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๊ณ ์ฌ๊ธฐ์ ์ ๊ทผํ ๋ ์๊ธฐ๊ณ ์์์ฃ ??
์ด ๋ฐฉ์์ thread-safe ํ์ง ์๊ธฐ ๋๋ฌธ์!!!
๋ค๋ฅธ ํ๋กํผํฐ์ shared๋ฅผ ํ ๋นํ๋ฉด ํด๋น ํ๋กํผํฐ์ ์ด๊ธฐํ ์์ ์ shared์ ์ด๊ธฐํ ์์ ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
๋ง์ฝ ๋ค๋ฅธ ์ค๋ ๋์์ shared๋ฅผ ์ด๋ค ํ๋กํผํฐ์ ํ ๋นํ๋ ค๋ ์์ ์ shared์ ๋ํ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ ์ํ๋ผ๋ฉด??
์ด๊ธฐํ ๋์ง ์์ ์ธ์คํด์ค์ ์ ๊ทผํด๋ฒ๋ฆฌ๊ฒ ๋๋ ๊ฒ์ด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ์ฃ ???
์์ ์ํฉ์ด ๋ฑ ๊ทธ๋ฐ ์ํฉ์ธ ๊ฒ์!
ํ์ง๋ง ์ฌ๊ธฐ๊ฐ ํ๋ฆผ.. (์ ํํ ํ์ํ์๋ฉด ์ทจ์์ ๋ถ๋ถ๋ง)
ํด๋น ์ํฉ์ ๋ฉํฐ ์ค๋ ๋์์์ ๋ค์ค ์ ๊ทผ๊ณผ ์๊ด์์๋ ์ํฉ..
์๋๋ฉด ์ฝ์คํ์ ๋ณด๋ฉด Thread 1๋ง ํ์ ๋์ด์๊ธฐ ๋๋ฌธ์ main ์ค๋ ๋์์ ๋ชจ๋ ์์ ์ด ์ด๋ฃจ์ด์ง๊ณ ์์..
๊ทธ๋ฌ๋ฉด ๋ญ๊ฐ ๋ฌธ์ ์๋ ์ค๋ฅ์๋! ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ด ๋งค์ฐ ๋์ ์ํฉ์์์ ์ด๊ธฐํ ์์ ์ด ๊ผฌ์๋ ์ฝ๋์์ต๋๋ค,,,
ํธ์ถ๋๋ ์์๋ฅผ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. main.swift ์์ ์ฑ๊ธํค ํด๋์ค์ ๋ฉ์๋ ํธ์ถ(์ด ๋ ์ฑ๊ธํค ์ด๊ธฐํ ์์)
2. ์ฑ๊ธํค ํด๋์ค ์ด๊ธฐํํ๋ ค๊ณ ํ๋ init ๋ด๋ถ์์ RockPaperScissorsGame ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ๊ณ ์์ ๊ทธ๋ฌ๋ฉด ๊ฑ๋ ์ด๊ธฐํํด์ผ์ง ใ ใ
3. RockPaperScissorsGame ์ด๊ธฐํํ๋ ค๊ณ ํ๋๋ฐ, ๋ RockPaperScissorsController()๋ฅผ ์์ฑํด์ ํ๋กํผํฐ์ ๋ฐ๋ก ํ ๋นํ๊ณ ์์. RockPaperScissorsGame๊ฐ ์ด๊ธฐํ ๋๋ ค๋ฉด RockPaperScissorsController ๋ฅผ ๋จผ์ ์ด๊ธฐํํด์ผ๊ฒ ๋ค.
4. RockPaperScissorsController ๋ถํฐ ์ด๊ธฐํํ๋ฌ ๊ฐ์๋ค. ๊ทผ๋ฐ ๋ญ์ง.. ํ๋กํผํฐ์ GamePlayer.shared ๋ผ๋ ์ฑ๊ธํค ํ๋กํผํฐ๋ฅผ ํ ๋นํ๊ณ ์๋ค,,,, ๋ ์ง๊ธ ์ฑ๊ธํค ํด๋์ค ์ด๊ธฐํํ๋ ค๊ณ ํ๊ณ ํ๊ณ ์ฌ๊ธฐ๊น์ง ์๋๋ฐ....์์ง ์ฑ๊ธํค ํ๋กํผํฐ๋ ์ด๊ธฐํ๊ฐ ๋๋์ง ์์๋๋ฐ.. ๋ฐํ์ ์๋ฌ ๋ฐ์ !!!!!!!
์ด๋ฐ ๊ณผ์ ์ผ๋ก ์ด๊ธฐํ ๊ณผ์ ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค,,,, ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ด ๋งค์ฐ ๋์ ์ํฉ์์ ์๋ก๊ฐ ์๋ก๋ฅผ ์ด์ฉํ๋ ค๊ณ ํ๋ ์ํฉ..
ํ๋ฆฐํธ๋ฅผ ์ฐ์ด์ ์ง์ ํ์ธํด๋ดค๋๋ฐ ์ฒด์ธ ํํ๋ก ์ด๊ธฐํ๋์ด์ผ ํ๋ ์ํฉ์ด๋ผ ์ด๋ init() ๋ ์๋ฃ๋์ง ์์ ํ๋ฆฐํธ๊ฐ ๋์ค์ง ์์์ต๋๋ค...
์ด์ ๊ฒ์๊ธ์์ lazy๋ฅผ ๋ถ์ฌ์ ํด๊ฒฐํด์ฃผ์๋ค๊ณ ํ๋๋ฐ, ๊ทธ๋ ๊ฒ ๋ฐ๊ฟ์ ํ๋ฆฐํธ๋ฅผ ์ฐ์ด๋ณด๋!!
์ฑ๊ธํค ํด๋์ค๊ฐ ๋ง์ง๋ง์ผ๋ก ์ด๊ธฐํ๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค!
์ฑ๊ธํค ํด๋์ค์ ํ๋กํผํฐ๋ฅผ ํ ๋น๋ฐ๋ ๋ณ์์ lazy๋ฅผ ๋ถ์ฌ์ฃผ์์ผ๋ ํด๋น ํ๋กํผํฐ๋ ์ ์์ ์ดํ์ ์์ ํ๊ฒ ์ด๊ธฐํ๋ ์ ์๊ฒ ์ฃ ??
์ฌ์ค ์ด๋ ๊ฒ lazy๋ก ํด๊ฒฐํ ์ ์์ง๋ง.. ์ง๊ธ ์ฝ๋๋ ๋ง๋ ์๋๋ ์์กด์ฑ.. ์ด๋ผ ... ๋ถํ์ํ ์์กด์ฑ์ ๋์ด์ฃผ๋ ํํ๋ก ๋ฆฌํฉํ ๋งํ๋ฉด ์ข๊ฒ ์ต๋๋ค .. To. ์ฝ๋ ์ฃผ์ธ
+ ์ ๊ฐ ์ฒ์์ ๋๋ฒ๊น ํ ๋ init() ํจ์ ์ ์ผ ์์ ํ๋ฆฐํธ๋ฅผ ์ฐ์ด์ ์ด๋ผ๋ผ ์ด๋์ ๋ผ์ด์ ํธ์ถ ์์๋ ๋ง๋๋ฐ?? ๋ญ๊ฐ ๋ฌธ์ ์ง?? ์ค๋ ๋ ๋ฌธ์ ์ธ๊ฐ?? ์ด๋ ๊ฒ ์๊ฐํ๋จ ๋ง์ด์ฃ .. ํ์ง๋ง,,, ํด๋น ํด๋์ค๋ ๊ตฌ์กฐ์ฒด๋ init()์ด ๋๋ ๋ ์ด๊ธฐํ๊ฐ ์๋ฃ๋ฉ๋๋ค.. ๊ทธ์ตธ.. ์ฐ๋ฆฌ๋ ํด๋น ํด๋์ค ํน์ ํ๋กํผํฐ๊ฐ ์์ ํ๊ฒ ์ด๊ธฐํ๊ฐ ์๋ฃ๋ ํ์ ์ ๊ทผ๋๊ณ ์๋์ง ์๊ณ ์ถ์ ๊ฒ์ด์๋๋ฐ.. ๊ทธ๋์ ๋๋ฒ๊น ์ ์๋ชปํ๋ค๋ ๋ณ๋ช ์๋ ๋ณ๋ช .. print() ์์น๋ฅผ ์ฎ๊ฒจ์ฃผ๋ ์์ ๊ฐ์ด ์๊ฐํ ์์๋๋ก ์ ์ฐํ์ต๋๋ค!!!
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ๋๋ ํ ๊ฐ์ง ์๋ฌธ.. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ํ๋กํผํฐ์ lazy๋ฅผ ๋ค ๋ถ์ฌ์ฃผ๋๊ฒ ์ข์ ๊ฒ์ผ๊น์???
์ค์ ๋ก ์ฌ์ฉ๋๋ ์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๋ ๋์์ง๊ณ , ์ด๊ธฐํ ์์ ๋ฌธ์ ๋ ์ฌ๋ผ์ง๋ ๊ฒ ์๋๊ฐ...
์๊ฐํ ์ ์๋๋ฐ.. ์ ๋ ์ด๋ฐ ์๋ฌธ์ด ๋ค์ด์ ์ฐพ์๋ณด๊ณ , ์๊ฐํด๋ดค๋๋ฐ!
๋ชจ๋ ํ๋กํผํฐ์ lazy ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์ํํด์ง ์ ์๋ ์ํฉ
1. lazy๋ฅผ ๋ถ์ฌ์ค ํ๋กํผํฐ๋ผ๋ฆฌ ๊ด๊ณ๊ฐ ์์ ๋
ํ์ชฝ์ด ๋ค๋ฅธ์ชฝ์ ์ฌ์ฉํ๋ ํํ๋ผ๋ฉด ๋ฌด์์ด ๋จผ์ ์ด๊ธฐํ๋๋์ง ์ ํํ ์ ์ ์์ผ๋ ์ด๊ธฐํ ์์ ์ด ๊ผฌ์ฌ์ ์ด๊ธฐํ๊ฐ ์๋ฃ๋์ง ์์ ํ๋กํผํฐ์ ์ ๊ทผํ๊ฒ ๋ ์ ์์ต๋๋ค.
2. lazy๋ Thread Safe ํ์ง ์์ต๋๋ค.
lazy์ ์น๋ช ์ ์ธ ๋จ์ .. Swift์ lazy var๋ ๋ฉํฐ ์ค๋ ๋์์ ์ ๊ทผ ์ ์ด๋์ ๋ผ์ด์ ๊ฐ ํ ๋ฒ ๋ถ๋ฆด ๊ฒ์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
+ ์์๋ก ์ ์ธํ ์ ์๋ค.. lazy var ๋ง ๊ฐ๋ฅ
๋๋ฒ๊น ์ ๋ค์ ํ๋ฉด์ ์ด๊ธฐํ ์์ ๊ณผ lazy์ ๋ํด ์ ํํ ์๊ฒ ๋ ๊ฒ ๊ฐ์ ๋ฟ๋ฏํ๊ณ , ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๊ฐ ๋์์ง๋ฉด ์๊ธธ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ง์ ํ์ธํ ์ ์์ด์ ์ข์์ต๋๋ค!!! ์ ์๊ฒ ๊ฐ์ด ๊ณ ๋ฏผํ ๊ธฐํ๋ฅผ ์ฃผ์ ๋๋ฃ๋ถ๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค๐๐
'๐ ๊ธฐ๋ก > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 20240102 (0) | 2024.01.03 |
---|---|
[TIL] 20231207 (3) | 2023.12.08 |
[TIL] 20231206 (0) | 2023.12.08 |
[TIL] 20231205 (2) | 2023.12.05 |
[TIL] 20231204 (1) | 2023.12.04 |