Trouble Shooting - ์ฑ๊ธํด ์ธ์คํด์ค์ ์ด๊ธฐํ ์์
๋ถ์บ ๋๋ฃ๋ถ์๊ฒ ๋ฐ์ ์ง๋ฌธ!
์ฑ๊ธํด ์ธ์คํด์ค๋ ๋ค๋ฅธ ํด๋์ค์์ ์ ์ญ ๋ณ์๋ ์์์ ํ ๋นํด๋๊ณ ํด๋น ๋ณ์๋ ์์์ ์ ๊ทผํด์ ์ฌ์ฉํ๋ฉด ์๋๋์???
์ค์ฅ?? ๋๋๋ฐ์ด,, but ๋๋ฃ์ ํ์ ์์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ ์์์... whyrano....
์ฝ๋๋ฅผ ๋ด ์๋ค. ๋ ์ญ๊ณ . (์ ๊ฐ ์ง ์ฝ๋๊ฐ ์๋๋ ์ฝ๋ ๋ธ๋ญ์ด ์๋ ์ค์ท์ผ๋ก ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค..!)
GamePlayer๋ผ๋ ํด๋์ค์์ static ํ๋กํผํฐ๋ก ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํด๋๊ณ ,
init() ์์ฑ์์ private์ผ๋ก ์ ๊ทผ์ ์ด๋ฅผ ํจ์ผ๋ก์จ ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ ํ๋๋ง ์์ฑ๋จ์ ๋ณด์ฅํด์ฃผ์ จ์!!!
์ฑ๊ธํด ํจํด์ ์ฌ์ฉํด์ ํด๋์ค๋ฅผ ์์ฃผ ์ ์์ฑํ์ จ์ฃ ??
์ด์ GamePlayer ๋ผ๋ ํด๋์ค ์ธ์คํด์ค์ ์ ๊ทผํ๋ ค๋ฉด shared ๋ผ๋ ์ด๋ฆ์ ํ๋กํผํฐ๋ก ์ ๊ทผํด์ผํจ!!!
RockPaperScissorsController ๋ผ๋ ๊ตฌ์กฐ์ฒด ์์์ ์๊น ์์ฑํด๋ ์ฑ๊ธํค ๊ฐ์ฒด์ ์ ๊ทผํด์ ํด๋น ํด๋์ค์ ํ๋กํผํฐ์ธ attackPlayer์ ๊ฐ์ ์ฌ์ฉํด์ฃผ๊ณ ์ถ์.
๊ทธ๋ฌ๋ฉด GamePlayer.shared๋ก ์๊น ์์ฑํด๋ ์ธ์คํด์ค์ ์ ๊ทผํด์ ์ฌ์ฉํด์ค ์ ์๊ฒ ์ฃ ??
์ฌ๊ธฐ๊น์ง๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.. ์คํํด๋ด๋ ํ๋ก๊ทธ๋จ์ด ์ ์๋๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!
but ์ฑ๊ธํด ๊ฐ์ฒด์ ์ ๊ทผํ ๋๋ง๋ค ํด๋์ค ์ด๋ฆ.shared ์ด๋ ๊ฒ ์ ๊ทผํด์ผ๋๋๊ณ ..... ๋ ๊ท์ฐฎ์์์......(์ค์ ๋ก ํด๋น ๊ตฌ์กฐ์ฒด ๋ด์์ ๊ฝค๋ ์ฌ๋ฌ๋ฒ ์ฑ๊ธํด ๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํด์ฃผ๊ณ ์๋ ์ํฉ)
์์ ๊ฐ์ด ์ ๊ทผํ๋ ค๋ ํด๋์ค or ๊ตฌ์กฐ์ฒด ๋ด์ ์ ์ญ์ ์ผ๋ก ์ ์ธํด๋๊ณ ๋ฐ๋ก๋ฐ๋ก ์ ๊ทผํด์ ์ฌ์ฉํ๊ณ ์ถ๋จ ๋ง์. ์ด๋ ๊ฒ ํ๋๊ฒ ๊ฐ๋ฅํ๊ฐ์??
๋น์ฐํ ๊ฐ๋ฅํฉ๋๋ค!!! ์ค์ ๋ก ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ง๋์ง ์์ ๊ฒ์!!
์ฌ๊ธฐ์ ๋๋ ์๋ฌธ.. ์ฑ๊ธํด์ ์ฑ ๋ด์ ์ธ์คํด์ค ์์ฒด๊ฐ ํ๋๋ง ์กด์ฌํ๋๋ฐ ์ด๋ ๊ฒ ๋ค๋ฅธ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์์ ํ๋กํผํฐ ํ๋๋ฅผ ๋ง๋ค์ด์ ํ ๋นํด๋๊ณ ์ด ํ๋กํผํฐ๋ก ์ ๊ทผํ๋ฉด ์ธ์คํด์ค ์ฌ๋ฌ ๊ฐ ์์ฑ๋๋ ๊ฒ ์๋๊ฐ??? ๋ฐ์ดํฐ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ์ผ์ด๋์ง ์๋์??
์ ๋ต์ ์๋๋๋ค!! ์ฑ๊ธํด ํด๋์ค์ ์์ฑ์์ private์ผ๋ก ์ ๊ทผ์ ์ด๋ฅผ ํด๋์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ง ์์ ๋ฟ๋๋ฌ ์์ ์ฝ๋์์ ๋ณ์์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํด ํ ๋นํด์ฃผ๊ณ ์๋ ๊ฒ์ด ์๋๋ผ shared์ ์ ์ฅ๋ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๊ณ ์์ ธ??? ๊ฑฑ์ ๋
ธ๋
ธ
์ปดํ์ผ ์๋ฌ๋ ์๋๋,, ์คํ์ ํด๋ด ์๋ค.
์ด๋ผ๋ผ ๋ฐํ์์ ์๋ฌ๊ฐ ๋ฐ์ํด ๊ฐ์ ์ข ๋ฃ๊ฐ ๋๋ค์..
์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด๋ ๋ฉ์ธ ์ค๋ ๋์์ ๋ฐ์ํ๊ณ ,, ์ผ์ชฝ ์ฝ ์คํ์ ๋ณด๋ฉด,, ํด๋์ค.init() or ๊ตฌ์กฐ์ฒด.init() ์ด ๋จ๋๊ฑธ ๋ณด๋ ์ด๊ธฐํ ์์ ๊ณผ ๊ด๋ จํ ์๋ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค!
์ด๋ค ์ธ์คํด์ค๊ฐ ์ด๊ธฐํ ๋๊ธฐ ์ ์ ์ ๊ทผ์ ํด์ฃผ๊ณ ์๋ ๋ฏ ํ๋ค์,, ์ฐพ์๋ด ์๋ค ,,
์ผ๋จ ์ฒ์์ GamePlayer.shared.~ ๋ก ์ ๊ทผํ์ ๋ ์๋ฌด ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์์๋ ์ด์ ๋?
๋ฐ๋ก๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ shared๋ฅผ staticํ๊ฒ ์ ์ธํด๋์๊ธฐ ๋๋ฌธ!!
Swift์์ static์ ์ฌ์ฉํด ํ์ ํ๋กํผํฐ๋ก ์ธ์คํด์ค๋ฅผ ์ ์ญ์ ์ผ๋ก ์์ฑํ๋ฉด, ์ฌ์ฉ ์์ ์ ์ด๊ธฐํ๊ฐ ๋จ!!!
์ฆ, lazy ํ๊ฒ ์ด๊ธฐํ๋๋ค๋ ์ ..๊ฐ์ฒด์ ์ ๊ทผํ ๋ ์ด๊ธฐํ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค! shared์ ์ฒ์ ์ ๊ทผํ ๋ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง!!
+ Swift์์๋ dispatch_once ๋ก ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์๋ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ํ๋ฒ๋ง ์ด๊ธฐํ๋๋ ๊ฒ์ ๋ณด์ฅํจ!!
์ฆ, Thread-Safeํ๊ฒ ์ด๊ธฐํ๊ฐ ๋๋ค๋ ๊ฒ์ (์ข๋ค..ใ
)
๊ทธ๋์ ์ฌ๊ธฐ์ ๊ธฐ์ GamePlayer.shared.~๋ฅผ ํธ์ถํด๋ ๋ฌธ์ ๊ฐ ์์๋ ๊ฒ!!! (swift์์๋ ์ ์ญ, ์ ์ ๋ณ์์ ์ด๊ธฐํ ๊ณผ์ ์ด atomic, thread-safe ํจ์ ๋ณด์ฅํด์ฃผ๊ธฐ ๋๋ฌธ์)
But, ๋ฌธ์ ์ํฉ์ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๊ณ ์ฌ๊ธฐ์ ์ ๊ทผํ ๋ ์๊ธฐ๊ณ ์์์ฃ ??
์ด ๋ฐฉ์์ thread-safe ํ์ง ์๊ธฐ ๋๋ฌธ์!!!
๋ค๋ฅธ ํ๋กํผํฐ์ shared๋ฅผ ํ ๋นํ๋ฉด ํด๋น ํ๋กํผํฐ์ ์ด๊ธฐํ ์์ ์ shared์ ์ด๊ธฐํ ์์ ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
๋ง์ฝ ๋ค๋ฅธ ์ค๋ ๋์์ shared๋ฅผ ์ด๋ค ํ๋กํผํฐ์ ํ ๋นํ๋ ค๋ ์์ ์ shared์ ๋ํ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ ์ํ๋ผ๋ฉด??
์ด๊ธฐํ ๋์ง ์์ ์ธ์คํด์ค์ ์ ๊ทผํด๋ฒ๋ฆฌ๊ฒ ๋๋ ๊ฒ์ด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ์ฃ ???
์์ ์ํฉ์ด ๋ฑ ๊ทธ๋ฐ ์ํฉ์ธ ๊ฒ์!
์ด ๊ตฌ์กฐ์ฒด ๋ด์์ GamePlayer.shared ๋ฅผ gamePlayer ๋ผ๋ ์ ์ญ๋ณ์(์์๋ ๊ฐ๋ฅ)์๋ค๊ฐ ํ ๋นํด์ฃผ๊ณ ์์ฃ ??
๊ทผ๋ฐ ๋ฉํฐ ์ค๋ ๋ฉ ํ๊ฒฝ์์ shared๊ฐ GamePlayer.shared๊ฐ ์ด๊ธฐํ ์๋์ด์๋ ์ํฉ์ด๋ผ๋ฉด??
์ด๊ธฐํ๋์ง ์์ ์ธ์คํด์ค์ ์ ๊ทผํ๊ฒ ๋์ด ๊ด๋ จ๋ ๋ถ๋ถ์์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ค๋ผ๋ผใ ในใฑ ์๊ธฐ๊ฒ ๋๋ ๊ฒ์ด์ฃ ..
๊ทธ๋ผ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ฃ ??? ์๋ก์ด ๋ณ์ or ์์์ ํ ๋น ํด์ค ๋๋ lazy๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค!!!!
์ค์ ๋ก ์ฌ์ฉํ๋ ์์ ์ ์ง์ฐ ์ด๊ธฐํ ํด์ค!!!!
์ด์ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ์คํ์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!!!
์ฐธ๊ณ ๋ก lazy๋ ๋ณ์์๋ง ๋ถ์ผ ์ ์์ต๋๋ค! (์์์๋ ๋ถ๊ฐ..)
ํธํํใ ์ฌ๋ฐ๋ค์.. ์๋๊ฐ ์ด๊ฑฐ ๋ณด๊ณ ์ดํดํ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.. ์ดํดํ ๊ฒ์ ๊ทธ๋ ์ฒ์ฌ๋๊น.....
์ดํด ์๊ฐ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ฌ๋ ค์ค์ธ์,,
๊ธ๊ณ ์ด๊ฑฐ ๋ณด๋ ์ ๋ฐฐ๋ค.. ์ฌ๊ธฐ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์ญ์ ..๋๊ธ ํ์ํฉ๋๋ค!!!
Tuist๋ฅผ ์ด์ฉํ ๋ชจ๋ํ - ์ธ๋ถ ์์กด์ฑ ์ถ๊ฐํ๊ธฐ
Xcode native Swift Package Manager๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํด์ local๋ก package๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ์!
remote๋ url๊ณผ requirement๋ฅผ ๋ฐ๋๋ค.
url์ SPM์ ์ง์ํ๋ ๋ ํฌ์ Remote Git URL, requirement๋ ๋ฒ์ ์ ๋ณด!!!
ThirdPartyLib > Project.swift (SnapKit ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ ์์)
import ProjectDescription
import ProjectDescriptionHelpers
let project = Project.makeModule(
name: "ThirdPartyLib",
product: .framework,
packages: [
.remote(url: "<https://github.com/SnapKit/SnapKit.git>",
requirement: .upToNextMajor(from: "5.0.0"))
],
dependencies: [
.package(product: "SnapKit")
]
)
tuist edit ๋ช ๋ น์ด ์ ๋ ฅ ํ ์์ ์ฝ๋ ๋ฃ์ด์ฃผ๋ฉด ๋จ!!
generate ํด๋ณด๋ฉด??
package๊ฐ ์ถ๊ฐ๋๊ณ ์ถ๊ฐํด์ค ํจํค์ง๋ฅผ import ํด์ ์ฌ์ฉํ ์ ์๊ฒ ๋จ!!!
์ด๋ ๊ฒ ๊ทธ๋ํ์๋ ์ถ๊ฐ๊ฐ ๋ฉ๋๋ค!!!
โ ๏ธ ์ฃผ์ํ ์ !!!
SPM, Carthage๋ง ์ง์ํฉ๋๋ค… cocoapods๋ ์ง์์ ํ์ง ์์์ ๋ฐ๋ก Podfile์ ๋ง๋ค์ด์ ์ฌ์ฉํด์ผ ํ๋ ์ด์๊ฐ ์๋ค๊ณ ํ๋ค์..
'๐ ๊ธฐ๋ก > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 20240102 (0) | 2024.01.03 |
---|---|
[TIL] 20231215 (1) | 2023.12.18 |
[TIL] 20231206 (0) | 2023.12.08 |
[TIL] 20231205 (2) | 2023.12.05 |
[TIL] 20231204 (1) | 2023.12.04 |