๐ Unity ๊ฐ๋ฐ ํ์: Assembly Definition File (.asmdef) ์์ ๋ถ์
Unity Document์์๋ ์๋์ ๊ฐ์ด ์ค๋ช
ํด์ฃผ๊ณ ์๋ค.

Assembly๋ ๋ฉ์ธ ๊ธฐ๋ฅ์ด ๊ฐ์ ์ฝ๋๋ฅผ ๋ฌถ์ด ๊ทธ๋ฃนํ ํ๋ค๊ณ ๋๋ ์ดํดํ๊ณ ์๋ค. ์ด๋ ์ปดํ์ผ ์ ํ๋์ DLL(Dynamic Link Library) ํ์ผ๋ก ๋ง๋ค์ด์ง๋ ๋
ผ๋ฆฌ์ ์ธ ์ฝ๋ ๋ฌถ์ ๋จ์์ด๋ค.
Unity๋ ๋ณ๋์ ์ค์ ์ด ์๋ค๋ฉด ์ ์ด๋ฏธ์ง์ ๊ฐ์ด Assembly-CSharp ํ๋์ ๋ชจ๋ ์ฝ๋๋ฅผ ํตํฉํ์ฌ ๊ด๋ฆฌํ๊ฒ ๋๋ค.
์ด๋ฅผ ์ฌ์ฉ์ ํธ์์ ๋ง์ถฐ ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋ชจ๋ํ ์์ผ์ฃผ๋ ์์
์ Assembly Definition File (.asmdef)์ ํ์ฉํ์ฌ ์งํํ๋ฉด ๋๋ค.
์ ์จ์ผ ํ๋๊ฐ?
Assembly-CSharp์ ๋ชจ๋ ์ฝ๋๊ฐ ํตํฉ๋์ด ๋ฌถ์ฌ ์๋ ์ํฉ์์๋, UIManager์ PlayerManager์ฒ๋ผ ์๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๊ฐ์ง ๋ชจ๋๋ค์ด ์๋ก๋ฅผ ์ง์ ์ฐธ์กฐํ๋ ์ํฉ์ด ๋น์ ์์ ์ผ๋ก ๋ณด์ด์ง ์์ ์ ์์ต๋๋ค. ์คํ๋ ค ์๋ฌ ์์ด ์ํ๋ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ํธ์ถํ ์ ์์ด ์ผ๊ฒฌ ํธ๋ฆฌํ๊ฒ ๋๊ปด์ง ์๋ ์์ฃ .
ํ์ง๋ง ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ด๋ฌํ โ์ฌ์ด ์ฐธ์กฐโ๊ฐ ๋ณ๋ ๋ฌธ์ ์ ๋ค์ด ๋๋ฌ๋๊ธฐ ์์ํฉ๋๋ค.
๋๋ UI ๊ด๋ จ ์ฝ๋๋ง ์์ ํ๋๋ฐ, Unity๋ ๋ชฌ์คํฐ์ ๊ด๋ จ๋ ์ฝ๋๊น์ง ๋ชจ๋ ๊ฒ์ฌํ๋ฉฐ ์ปดํ์ผํ๊ณ ์์ต๋๋ค. ๋ชฌ์คํฐ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ ํ ๊ฑด๋๋ฆฌ์ง๋ ์์๋๋ฐ ๋ง์ด์ฃ .
๋ ๋์๊ฐ, UI ๊ด๋ จ ์ฝ๋๋ง์ ๋
๋ฆฝ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ํ
์คํธํ๊ณ ์ถ์ ๋ ์๋ง์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ชฌ์คํฐ๋ฅผ ์ฐพ์ ์ ์๊ณ , ํ๋ ์ด์ด๋ฅผ ์ฐพ์ ์ ์๊ณ , ๋ฌด๊ธฐ๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ํฉ๋๋ค. ๋๋ ๊ทธ์ UI์ ๋ํ๋๋ ํ
์คํธ๋ฅผ ์์ ํ๋ ค๊ณ ํ์ ๋ฟ์ธ๋ฐโฆ
์ด๋ฌํ ๋์ ๊ฒฐํฉ๋(High Coupling)์ ๋นํจ์จ์ ์ธ ์ปดํ์ผ์ด๋ผ๋ ๊ทผ๋ณธ์ ์ธ ์ด์ํจ์ ๋๊ผ๋ค๋ฉด, ์ฝ๋๋ฅผ ๊ธฐ๋ฅ๋ณ๋ก ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ Assembly Definition File (.asmdef)์ ํ์ฉํด์ผ ํ ๋์ ๋๋ค.
์๋๋ .asmdef ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ์ป์ ์ ์๋ ํต์ฌ์ ์ธ ์ด์
1. ์๋ฐฉํฅ ์ฐธ์กฐ ์ ํ (๋ฎ์ ๊ฒฐํฉ๋ ์ ๋)
2. ์ปดํ์ผ ์๋ ์ฆ๊ฐ (์ ์ง์ ์ปดํ์ผ)
1. ์๋ฐฉํฅ ์ฐธ์กฐ(Circular Dependency) ์ ํ
์๋ฐฉํฅ ์ฐธ์กฐ๋ ์๋ก๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ์ํฉ์ ๋งํ๋ฉฐ, ์ด๋ ๋ชจ๋ ๊ฐ์ ๋์ ๊ฒฐํฉ๋(High Coupling)๋ฅผ ์ ๋ฐํ์ฌ ํ ์คํธ์ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
์๋ฅผ ๋ค์ด, UIManager์ PlayerManager ๋ผ๋ Manager ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๋ ๊ฐ Manager์ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ๋ค.
UIManager : ํ๋ ์ด์ด ์ฒด๋ ฅ ํ์, ์ธ๋ฒคํ ๋ฆฌ ํ์ ๋ฑ
PlayerManager : ํ๋ ์ด์ด ์ ๋ณด ๋ณด์ , ๋ฐ๋ฏธ์ง ํ์ ๊ธฐ๋ฅ ๋ฑ
์์ ๊ฐ์ ๋, ๋ชฌ์คํฐ A๊ฐ ํ๋ ์ด์ด๋ฅผ ๊ณต๊ฒฉ ํ๋ฉด PlayerManager๋ ๋ฐ๋ฏธ์ง๊ฐ ๋ค์ด์๋ค๊ณ ํ๋จํ์ฌ UIManager๋ฅผ ํธ์ถํ์ฌ ํ๋ ์ด์ด ์ฒด๋ ฅ์ ๊ฐ์ ์์ผ ์ค๋๋ค.
๊ทธ๋ฌ๊ณ ํ๋ ์ด์ด๊ฐ ์ธ๋ฒคํ ๋ฆฌ์์ ์ฒด๋ ฅ ํฌ์
์ ์ฌ์ฉํ๊ฒ ๋๋ฉด UIManager๋ PlayerManager๋ฅผ ํธ์ถํ์ฌ ์ฒด๋ ฅ์ด ํ๋ณต๋์๋ค๊ณ ์๋ ค์ค๋๋ค.
๐ ๋ฌธ์ ์ ์์ฝ:
์ด๋ ๊ฒ ๋๋ฉด UIManager์ PlayerManager๋ ๋ฉ์ธ ๊ธฐ๋ฅ์ด ์๋ก ๋ค๋ฆ์๋ ๋ถ๊ตฌํ๊ณ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค. ์ด๋ก ์ธํด UIManager์ ์ผ๋ถ ๊ธฐ๋ฅ(์: ๋ฉ์ธ๋ฉ๋ด)๋ง ํ
์คํธํ๊ณ ์ถ์ด๋ ์ ์ฒด ์์คํ
(PlayerManager ํฌํจ)์ ๋ก๋ํด์ผ ํ๋ ๋
๋ฆฝ์ฑ ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
โ
.asmdef์ ์ญํ :
.asmdef ํ์ผ์ ์ฌ์ฉํ๋ฉด, ๊ฐ ์ด์
๋ธ๋ฆฌ(๋ชจ๋) ๊ฐ์ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ํ์ผ ๋ด์์ ๋ช
์์ ์ผ๋ก ์ ์ํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์์ A๊ฐ B๋ฅผ ์ฐธ์กฐํ๊ณ , B๊ฐ A๋ฅผ ์ฐธ์กฐํ๋ ์๋์น ์์ ์ํ ์ฐธ์กฐ๋ฅผ ์ปดํ์ผ ๋จ๊ณ์์๋ถํฐ ์ฐจ๋จํ์ฌ, ๊ฐ๋ฐ์๊ฐ ์ฒ์๋ถํฐ ๋จ๋ฐฉํฅ ์์กด์ฑ์ ์ค๊ณํ๋๋ก ๊ฐ์ ํฉ๋๋ค.
2. โก๏ธ ์ปดํ์ผ ์๋ ์ฆ๊ฐ (์ ์ง์ ์ปดํ์ผ)
Unity์์๋ ์ฝ๋๋ฅผ ์์ ํ๊ฒ ๋๋ฉด ์ปดํ์ผ๋ฌ์ ์ํด ์ปดํ์ผ์ ํ๋ฒ ๊ฑฐ์น๊ฒ ๋๋ค. ์ด ๊ณผ์ ์ ๋ฌธ๋ฒ ์๋ฌ๋, ์ฐธ์กฐ ์๋ฌ๋ฅผ ๋ฐ๊ฒฌํด ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ์ค์ํ ๋จ๊ณ์ด๋ค.
โ .asmdef ๋ฏธ์ฌ์ฉ ์ (๋ฌธ์ ์ ):
๋ฌธ์ ๋ ๋ด๊ฐ A๋ผ๋ .cs ํ์ผ์ ์์ ํ์ ๋ ๋์ผํ Assembly-CSharp ๋ด์ ๋ชจ๋ ์ฝ๋๋ฅผ ํต์งธ๋ก ์ปดํ์ผ ํ๊ฒ ๋์ด์, ๋ฌถ์ฌ์๋ ์ฝ๋๋ค์ด ๋ง์์๋ก ์ปดํ์ผ ์๊ฐ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋๊ฒ ๋๋ค.
์์ ํ๊ณ ํ
์คํธ ํ๋ ๊ฒ์ด ์ผ์์ธ ๊ฐ๋ฐ์์๊ฒ ์ด๋ ๊ฝค๋ ํฐ ์๊ฐ ๋ญ๋น๋ก ๋ค๊ฐ์๊ณ , ํนํ ํ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ด ๋ฌธ์ ๋ ๋์ฑ ์ฌ๊ฐํด์ง๋ค.
โ
.asmdef ์ฌ์ฉ ์ (ํด๊ฒฐ์ฑ
):
.asmdef๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ์ ์ฝ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ์์ ๋
๋ฆฝ์ ์ธ ์ด์
๋ธ๋ฆฌ๋ก ๋ถํ ๋ฉ๋๋ค. ์ด์ A๋ผ๋ ํ์ผ ํ๋๋ฅผ ์์ ํ๋๋ผ๋, ์ปดํ์ผ๋ฌ๋ A๊ฐ ์ํ ์ด์
๋ธ๋ฆฌ์ A ์ด์
๋ธ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ์ด์
๋ธ๋ฆฌ๋ง ์ฌ์ปดํ์ผ(Recompile)ํฉ๋๋ค. ๋๋จธ์ง ๋
๋ฆฝ๋ ์ด์
๋ธ๋ฆฌ๋ ์ปดํ์ผํ์ง ์์ ์ปดํ์ผ ์๊ฐ์ด ํ๊ธฐ์ ์ผ๋ก ๋จ์ถ๋ฉ๋๋ค.
โ Assembly Definition (.asmdef) ๊ฐ์ธ ํ๋ก์ ํธ ์ ์ฉ ํ๊ธฐ
์ค์ ๋ก ๊ธฐ๋ฅ์ ๊ฒฝํํด๋ณด๊ณ ์ ๊ฐ์ธ ํ๋ก์ ํธ์ Assembly Definition File (.asmdef)์ ์ ์ฉํด ๋ณด์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ด ์ฃผ๋ก ๋๊ท๋ชจ ํ ํ๋ก์ ํธ์์ ๋น์ ๋ฐํ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ๋ง์ด ๋ค์์ง๋ง, ์ฒ์๋ถํฐ ํฐ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ๊ฒ์ ์ด๋ ค์ธ ๊ฒ์ด๋ผ ํ๋จํ์ฌ ์์ ํ๋ก์ ํธ์์ ๊ฒฝํ์ ์์ํ์ต๋๋ค.
์ ์ ์ฝ๋์์์๋ ๋ถํ์ํ๊ณ ๋ณต์กํ ์ฐธ์กฐ๊ฐ ๋ง์๊ณ , ์ด ์ฐธ์กฐ๋ค์ ์ ๊ฑฐํ๊ณ ๋ชจ๋ํํ๋ ๊ณผ์ ์์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ๋ฅ๋ ฅ์ด ํฅ์๋๋ ๋ฏํ ์ฐฉ๊ฐ์ ๋๊ผ์ต๋๋ค.
1. ๐ค ๊ฒฐํฉ๋ ๊ฐ์ ๋ฐ ๋จ๋ฐฉํฅ ์์กด์ฑ ํ๋ฆฝ
์์ ์ ์ ์ด์ ๋๋ก ์ด์ ๋ธ๋ฆฌ ๊ฐ์ ๋ถํ์ํ ์ง์ ์ฐธ์กฐ๊ฐ ์ฌ๋ผ์ก์์ ์ฒด๊ฐํ์ต๋๋ค.
๊ฐ์ฅ ํฐ ๋ณํ๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ๋์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชฌ์คํฐ๊ฐ ์ฃฝ์ผ๋ฉด ์ ์๊ฐ ์ฌ๋ผ๊ฐ๋ ๋ก์ง์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
- ์ด์ (์ง์ ์ฐธ์กฐ):
Monster.cs์์Score.cs์ ์๋ ์ ์ ์ฆ๊ฐ ํจ์๋ฅผ ์ง์ ํธ์ถํ์ต๋๋ค. (์๋ฐฉํฅ ์ฐธ์กฐ ์ ๋ฐ) - ํ์ฌ (์ด๋ฒคํธ ๊ธฐ๋ฐ):
Monster.cs๋GameManager(๊ณตํต ํด๋์ค)์ ๋ชฌ์คํฐ๊ฐ ์ฃฝ์๋ค๋ ์ ํธ(์ด๋ฒคํธ)๋ง ๋ณด๋ ๋๋ค.Score.cs๋ ์ด ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ๊ณ ์๋ค๊ฐ ์ ํธ๊ฐ ์ค๋ฉด ์์ ์ ์ ์๋ฅผ ์ฌ๋ฆฌ๋ ํจ์๋ฅผ ์คํํฉ๋๋ค.
A(GameManager - ์ด๋ฒคํธ ๋ธ๋ก์ปค)
B[Score.cs] --> A|์ด๋ฒคํธ ๊ตฌ๋
|
C[Monster.cs] --> A|์ด๋ฒคํธ ๋ฐ์| --> |์ด๋ฒคํธ ํธ์ถ|
2. โก๏ธ ์ปดํ์ผ ์๋ ํฅ์ (์ ์ง์ ์ปดํ์ผ)
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์์ ์ปดํ์ผ ์๋๊ฐ ์๋ฟ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๋ณํ๋ฅผ ์ฒด๊ฐํ ์ ์์์ต๋๋ค.
์ด์ ์๋ ์ฝ๋๋ฅผ ์์ ํ๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ ์ฝ๋๊ฐ ๋ฌถ์ธ ํ๋์ ๊ฑฐ๋ํ Assembly-CSharp๋ฅผ ์ฌ์ปดํ์ผํ๋๋ผ ์ผ์ ์๊ฐ ์ง์ฐ์ด ๋ฐ์ํ์ต๋๋ค.
.asmdef ์ ์ฉ ํ์๋, ์ฐธ์กฐํ๋ ์ด์
๋ธ๋ฆฌ๊ฐ ์ ์ ๋ชจ๋ (์์ .dll)์ ์์ ํ์ ๋ ์ปดํ์ผ ์๊ฐ์ด ๋์ ๋๊ฒ ์ค์ด๋ค์์ต๋๋ค. ์ด๋ ์์ ๋ ํ์ผ๊ณผ ๊ทธ์ ์์กดํ๋ ์ด์
๋ธ๋ฆฌ๋ง ์ปดํ์ผํ๋ ์ ์ง์ ์ปดํ์ผ(Incremental Compilation)์ด ์ ์์ ์ผ๋ก ์๋ํจ์ ์๋ฏธํฉ๋๋ค. ์์ ํ๋ก์ ํธ์์๋ ๊ฐ๋ฐ ํจ์จ์ฑ์ด ์ฌ๋ผ๊ฐ์ ํ์ธํ ์ ์์์ต๋๋ค.
๐ก ๊ฒฐ๋ก ๋ฐ ์ค๋ฌด์ ๊ณ ๋ ค ์ฌํญ
์์ ํ๋ก์ ํธ์์๋ ๋ถ๊ตฌํ๊ณ .asmdef๊ฐ ์ ๊ณตํ๋ ๊ฒฐํฉ๋ ๊ฐ์์ ์ปดํ์ผ ์๋ ๊ฐ์ ์ด์ ์ ๋ชจ๋ ์ฒด๊ฐํ์ต๋๋ค.
ํ์ง๋ง ๋์์, ํฐ ํ๋ก์ ํธ์ผ์๋ก ์ ์ฉํ๊ธฐ ๋ ์ด๋ ค์ธ ์ ์๋ค๋ ์๊ฐ๋ ๋ค์์ต๋๋ค. ๊ด๋ฆฌํ ์ฝ๋๊ฐ ๋ง์์ง๊ณ ํ์์ด ๋ง์์ง์๋ก
- ์ด๊ธฐ ์ค๊ณ์ ์ด๋ ค์: ๋ชจ๋ ์ฝ๋๋ฅผ ๋๋๊ณ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ์ด๊ธฐ ์ค์ ๋น์ฉ์ด ๋์ต๋๋ค.
- ์ ์ง๋ณด์์ ์ด๋ ค์: ๋ชจ๋ ๊ฐ์ ์ฐธ์กฐ ๊ท์น์ ์งํค๊ธฐ ์ํ ํ ๋ด ๊ท์น ์ ๋ฆฝ ๋ฐ ์ด๋ฅผ ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํ ์ ๋ด ์ญํ ์ด ํ์ํ๋ค๋ ๊ฒ์ ๋๊ผ์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, .asmdef๋ ๋จ์ํ โ์๋ ๊ฐ์ โ์ ๋์ด, ์ฝ๋ ์ค๊ณ ๋ฅ๋ ฅ๊ณผ ๊ฐ๋ฐ ๋ฅ๋ฅ ์ ๋์์ ๋์ด์ฌ๋ฆฌ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ์์ ๊ท๋ชจ์์๋ถํฐ ์ต๊ด์ ๋ค์ด๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.