๐
2025-08-14
C++
๋์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ delete ํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ์ํ๋ค.
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํด delete๋ฅผ ๋ ๋ฒ ์ด์ํ๊ฑฐ๋ ์ด๋ฏธ ์ง์์ง ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ฉด ํฌ๋์๊ฐ ๋ฐ์ํ๋ค.
UE
๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ๊ด๋ฆฌ
-> ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ด ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์์ผ๋ฉด ๋์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ผ๋ก ํ๋จํ๊ณ ๋ฉ๋ชจ๋ฆฌ ํด์
GC ๊ท์น
deleteํ๋ฉด ์๋๋ค. nullptr๋ก ์ฐธ์กฐ๋ง ๋์ผ๋ฉด GC๊ฐ ์์์ ์ฒ๋ฆฌํ๋ค.UObject
์ผ๋ฐ C++ ํด๋์ค์ ๋ฌ๋ฆฌ ๋ธ๋ฃจํ๋ฆฐํธ ์ง์, ์๋ํฐ ํตํฉ, ์๋ ์ ์ฅ, ๋ฉ๋ชจ๋ฆฌ ์๋ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ์ธ๋ฆฌ์ผ ์์ง์ ๊ณ ๊ธ๊ธฐ๋ฅ์ ํ๋๋ก ๋ฌถ์ด์ฃผ๋ ํด๋์ค์ด๋ค.
GENERATED_BODY() : ์ธ๋ฆฌ์ผ์ด ํ์ํ ์ฝ๋๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๋งคํฌ๋ก
UPROPERTY() : ์๋ํฐ ๋ฐ ๋ธ๋ฃจํ๋ฆฐํธ ์ ๊ทผ, ์๋ ์ ์ฅ ๊ธฐ๋ฅ ์ง์
UFUNCTION() : ๋ธ๋ฃจํ๋ฆฐํธ ์ง์, ์๋ํฐ ํตํฉ
ํต์ฌ ๊ธฐ๋ฅ
1. ๋ธ๋ฃจํ๋ฆฐํธ ํตํฉ
2. ์๋ํฐ ํตํฉ
3. ์๋ ์ ์ฅ/๋ถ๋ฌ์ค๊ธฐ(์ง๋ ฌํ)
4. ๋ฆฌํ๋ ์
5. ๋ฉ๋ชจ๋ฆฌ ์๋ ๊ด๋ฆฌ
์์ ๊ด๊ณ์ ํต์ฌ
์ธ๋ฆฌ์ผ์์๋ ๋ชจ๋ UObject๊ฐ ์ฃผ์ธ์ด ์๋ค. ์ฃผ์ธ์ด ์ฌ๋ผ์ง๋ฉด ์์ ๋ฌผ๋ ์๋ ์ญ์ ๋๋ค.
GC๊ฐ ๋ฃจํธ๋ถํฐ Outer ์ฒด์ธ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ
์์ฃผ ํ๋ ์ค์
1. Outer๋ฅผ ์๋ชป ์ ํ
CreateDefaultSubobject - ๋ฏธ๋ฆฌ ์ค๋น
NewObject - ํ์ํ ๋
๋ผ์ดํ ์ฌ์ดํด ์ฝ๋ฐฑ ํจ์
1. void PostInitProperties(): ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์งํ ์คํ
2. void PostLoad(): ์ธ์ด๋ธ ํ์ผ์ด๋ ์๋ํฐ์์ ์์
์ ๋ก๋ํ ์งํ ์คํ
3. void BeginDestroy(): GC๊ฐ ์ญ์ ๋ฅผ ๊ฒฐ์ ํ์ ๋ ์คํ
4. void FinishDestroy(): ์ญ์ ๋๋ฉด์ ๋ง์ง๋ง์ ํธ์ถ
์ด๋ป๊ฒ ์์ฐ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ์ง์ฐ๋์ง
Mark
์ ์ผ ์ฒ์ -> ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ฏธํ์ธ ์ํ๋ก ์ด๊ธฐํ ํ๋ค.
๋ฃจํธ๋ถํฐ ์์(World)
์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๊ฐ ์๋์ง ํ์ธํ๋ฉด์ ๋งํฌ
Sweep
ํ์๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ์ญ์
GC๊ฐ UPROPERTY()๋ก ์ฐธ์กฐ๋ ๊ฐ์ฒด๋ง ๋ณด๋ ์ด์
1. ์ฑ๋ฅ: UObject์ ๊ด๋ จ์๋ ํฌ์ธํฐ๋ง ํ์ธ
2. ํ์
์์ ์ฑ: UObject๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ตฌ๋ถํด์ผ ํ๊ธฐ ๋๋ฌธ
3. ์๋ ํ์
: ๋ฒ๋ฆด ํฌ์ธํฐ์ธ์ง ์๋๋ฅผ ํ์ธ
UPROPERTY() ์ฌ์ฉ ์ฌ๋ก
1. ๊ธฐ๋ณธ ์ฐธ์กฐ
2. ๊ตฌ์กฐ์ฒด ์์ ์ฐธ์กฐ
UPROPERTY() ์๋ ์ฐธ์กฐ ์์ ํ๊ฒ ๋ค๋ฃจ๊ธฐ
์๋ช
์ ๋ช
ํํ๊ฒ ๊ด๋ฆฌ
์ฃฝ๊ธฐ์ ์ ํฌ์ธํฐ ๋ช
ํํ๊ฒ ํด์
GC์๊ฒ ์ ๋ ์ง์ฐ์ง๋ง๋ผ๊ณ ๋ช ๋ น
GC๊ฐ ์ ๋ ์ง์ฐ์ง ์๋ ๋ฃจํธ
1. GEngine
2. GGameInstance
3. GWorld
4. ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ์ถ๊ฐํ ๋ฃจํธ (AddToRoot)
๋ฃจํธ์ ์ถ๊ฐํ๊ณ ์ญ์ ํ์ง์์ผ๋ฉด ๋ฃจํธ์ ๋๋ฌด ๋ง์ด ์์ผ ์ ์์ผ๋ฏ๋ก ์ฃผ์
๋ฃจํธ ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์์ง๊ฑฐ๋ ์์ฃผ ์ถ๊ฐํ๊ณ ์ญ์ ํ๋๊ฒ๋ ์ฑ๋ฅ์ ๋ฌด๋ฆฌ๊ฐ ๊ฐ๋ฏ๋ก ์ฃผ์ํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค.
Hard Reference (๊ฐํ ์ฐธ์กฐ)
์ผ๋ฐ์ ์ธ ํฌ์ธํฐ ์ฐธ์กฐ. ์์ ๊ด๊ณ
์์ผ๋ฉด ์๋๋ ํ์ ๊ด๊ณ์ผ ๋ ์ฌ์ฉํ๋ค.
Weak Reference (์ฝํ ์ฐธ์กฐ)
์ง์ผ๋ณด๋ ์ฐธ์กฐ. ๋์์ ๋ณดํธํ์ง ์๋๋ค.
ํญ์ ์ ํจ์ฑ ์ฒดํฌํ ํ ๋์ ์คํ
GC๊ฐ ๋ณดํธํ์ง ์๋๋ค.
๋ ๊ฐ์ฒด๊ฐ ์๋ก ๊ฐํ ์ฐธ์กฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ GC๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ์ง ์์ -> ๋ฉ๋ชจ๋ฆฌ ๋์
1. ์ํ ์ฐธ์กฐ๋ฅผ ๋ง๊ธฐ ์ํด ๋ถ๋ชจ->์์ ์ ๊ฐํ์ฐธ์กฐ, ์์->๋ถ๋ชจ ๋ ์ฝํ์ฐธ์กฐ ํ๋๊ฒ ์ข๋ค.
2. ์ธํฐํ์ด์ค๋ก ์์กด์ฑ ์ค์ด๊ธฐ
3. ๋ธ๋ฆฌ๊ฒ์ดํธ๋ก ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํต -> ์๋ก ์ฐธ์กฐํ ํ์ ์๋ค.
์ถ์ฒ: ์คํ๋ฅดํ์ฝ๋ฉ ๋ด์ผ๋ฐฐ์์บ ํ