[TIL] 250814

๊น€์„ธํฌยท2025๋…„ 8์›” 14์ผ

โœ๏ธToday I Learned

๐Ÿ“… 2025-08-14

  • UE - GC์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

UE - GC์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

1.1 ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ: C++ vs UE

C++
๋™์  ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ delete ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐœ์ƒํ•œ๋‹ค.
๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด delete๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ์ง€์›Œ์ง„ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ฉด ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

UE
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™ ๊ด€๋ฆฌ
-> ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์ด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์œผ๋ฉด ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
GC ๊ทœ์น™

  1. UObject ์ƒ์† ํด๋ž˜์Šค๋งŒ ๊ด€๋ฆฌํ•œ๋‹ค.
  2. UPROPERTY๋กœ ๋ฆฌํ”Œ๋ ‰์…˜ ์‹œ์Šคํ…œ์— ๋“ฑ๋กํ•˜์—ฌ ์ฐธ์กฐ๋ฅผ ํ‘œ์‹œํ•ด์•ผ GC๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์ ˆ๋Œ€ deleteํ•˜๋ฉด ์•ˆ๋œ๋‹ค. nullptr๋กœ ์ฐธ์กฐ๋งŒ ๋Š์œผ๋ฉด GC๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

1.2 UObject๋ž€

UObject
์ผ๋ฐ˜ C++ ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ์ง€์›, ์—๋””ํ„ฐ ํ†ตํ•ฉ, ์ž๋™ ์ €์žฅ, ๋ฉ”๋ชจ๋ฆฌ ์ž๋™ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์–ธ๋ฆฌ์–ผ ์—”์ง„์˜ ๊ณ ๊ธ‰๊ธฐ๋Šฅ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๋Š” ํด๋ž˜์Šค์ด๋‹ค.
GENERATED_BODY() : ์–ธ๋ฆฌ์–ผ์ด ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋งคํฌ๋กœ
UPROPERTY() : ์—๋””ํ„ฐ ๋ฐ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ์ ‘๊ทผ, ์ž๋™ ์ €์žฅ ๊ธฐ๋Šฅ ์ง€์›
UFUNCTION() : ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ์ง€์›, ์—๋””ํ„ฐ ํ†ตํ•ฉ

ํ•ต์‹ฌ ๊ธฐ๋Šฅ
1. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ํ†ตํ•ฉ
2. ์—๋””ํ„ฐ ํ†ตํ•ฉ
3. ์ž๋™ ์ €์žฅ/๋ถˆ๋Ÿฌ์˜ค๊ธฐ(์ง๋ ฌํ™”)
4. ๋ฆฌํ”Œ๋ ‰์…˜
5. ๋ฉ”๋ชจ๋ฆฌ ์ž๋™ ๊ด€๋ฆฌ

1.3 Outer ์ฒด์ธ

์†Œ์œ  ๊ด€๊ณ„์˜ ํ•ต์‹ฌ
์–ธ๋ฆฌ์–ผ์—์„œ๋Š” ๋ชจ๋“  UObject๊ฐ€ ์ฃผ์ธ์ด ์žˆ๋‹ค. ์ฃผ์ธ์ด ์‚ฌ๋ผ์ง€๋ฉด ์†Œ์œ ๋ฌผ๋„ ์ž๋™ ์‚ญ์ œ๋œ๋‹ค.
GC๊ฐ€ ๋ฃจํŠธ๋ถ€ํ„ฐ Outer ์ฒด์ธ์„ ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ

  • World - Level - Actor - Component - SubObject

์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜
1. Outer๋ฅผ ์ž˜๋ชป ์„ ํƒ

  • ์ฃผ์ธ ๊ฐ์ฒด๋”ฐ๋ผ์„œ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.
  1. Outer ์ฒด์ธ ๋Š๊ธฐ
  • Rename()์œผ๋กœ ์ฃผ์ธ ๊ฐ์ฒด๋ฅผ ์ด๋™์‹œํ‚ค๋ฉด ์†Œ์œ ๋ฌผ์ด๋˜ ๊ฐ์ฒด๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์‹œ์ ์— GC๊ฐ€ ๊ฑท์–ด๊ฐˆ์ˆ˜์žˆ๋‹ค.

2.1 ์ƒ์„ฑ ํŒจํ„ด

CreateDefaultSubobject - ๋ฏธ๋ฆฌ ์ค€๋น„

  • ์ƒ์„ฑ์ž์—์„œ๋งŒ ์‚ฌ์šฉ

NewObject - ํ•„์š”ํ•  ๋•Œ

2.2 UObject ๋ผ์ดํ”„์‚ฌ์ดํด

๋ผ์ดํ”„ ์‚ฌ์ดํด ์ฝœ๋ฐฑ ํ•จ์ˆ˜
1. void PostInitProperties(): ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์งํ›„ ์‹คํ–‰
2. void PostLoad(): ์„ธ์ด๋ธŒ ํŒŒ์ผ์ด๋‚˜ ์—๋””ํ„ฐ์—์„œ ์—์…‹์„ ๋กœ๋“œํ•œ ์งํ›„ ์‹คํ–‰
3. void BeginDestroy(): GC๊ฐ€ ์‚ญ์ œ๋ฅผ ๊ฒฐ์ •ํ–ˆ์„ ๋•Œ ์‹คํ–‰
4. void FinishDestroy(): ์‚ญ์ œ๋˜๋ฉด์„œ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœ

2.3 GC ๋™์ž‘ ์›๋ฆฌ: Mark & Sweep

์–ด๋–ป๊ฒŒ ์•ˆ์“ฐ๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„์„œ ์ง€์šฐ๋Š”์ง€
Mark
์ œ์ผ ์ฒ˜์Œ -> ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋ฏธํ™•์ธ ์ƒํƒœ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
๋ฃจํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘(World)
์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด์„œ ๋งˆํฌ
Sweep
ํ‘œ์‹œ๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์‚ญ์ œ

2.4 UPROPERTY()

GC๊ฐ€ UPROPERTY()๋กœ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋งŒ ๋ณด๋Š” ์ด์œ 
1. ์„ฑ๋Šฅ: UObject์™€ ๊ด€๋ จ์žˆ๋Š” ํฌ์ธํ„ฐ๋งŒ ํ™•์ธ
2. ํƒ€์ž… ์•ˆ์ „์„ฑ: UObject๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ
3. ์˜๋„ ํŒŒ์•…: ๋ฒ„๋ฆด ํฌ์ธํ„ฐ์ธ์ง€ ์˜๋„๋ฅผ ํ™•์ธ

UPROPERTY() ์‚ฌ์šฉ ์‚ฌ๋ก€
1. ๊ธฐ๋ณธ ์ฐธ์กฐ
2. ๊ตฌ์กฐ์ฒด ์•ˆ์˜ ์ฐธ์กฐ

UPROPERTY() ์—†๋Š” ์ฐธ์กฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ
์ˆ˜๋ช…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌ
์ฃฝ๊ธฐ์ „์— ํฌ์ธํ„ฐ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์ œ

2.5 AddToRoot

GC์—๊ฒŒ ์ ˆ๋Œ€ ์ง€์šฐ์ง€๋ง๋ผ๊ณ  ๋ช…๋ น

GC๊ฐ€ ์ ˆ๋Œ€ ์ง€์šฐ์ง€ ์•Š๋Š” ๋ฃจํŠธ
1. GEngine
2. GGameInstance
3. GWorld
4. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๋ฃจํŠธ (AddToRoot)

๋ฃจํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜์ง€์•Š์œผ๋ฉด ๋ฃจํŠธ์— ๋„ˆ๋ฌด ๋งŽ์ด ์Œ“์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜
๋ฃจํŠธ ๊ฐ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๊ฑฐ๋‚˜ ์ž์ฃผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š”๊ฒƒ๋„ ์„ฑ๋Šฅ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€๋ฏ€๋กœ ์ฃผ์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

3.1 Hard vs Weak

Hard Reference (๊ฐ•ํ•œ ์ฐธ์กฐ)
์ผ๋ฐ˜์ ์ธ ํฌ์ธํ„ฐ ์ฐธ์กฐ. ์†Œ์œ  ๊ด€๊ณ„
์—†์œผ๋ฉด ์•ˆ๋˜๋Š” ํ•„์ˆ˜ ๊ด€๊ณ„์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

Weak Reference (์•ฝํ•œ ์ฐธ์กฐ)
์ง€์ผœ๋ณด๋Š” ์ฐธ์กฐ. ๋Œ€์ƒ์„ ๋ณดํ˜ธํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํ•ญ์ƒ ์œ ํšจ์„ฑ ์ฒดํฌํ•œ ํ›„ ๋™์ž‘ ์‹คํ–‰
GC๊ฐ€ ๋ณดํ˜ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

3.2 ์ˆœํ™˜ ์ฐธ์กฐ ์ฐจ๋‹จ

๋‘ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๊ฐ•ํ•œ ์ฐธ์กฐ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ GC๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•˜์ง€ ์•Š์Œ -> ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜
1. ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ->์ž์‹ ์€ ๊ฐ•ํ•œ์ฐธ์กฐ, ์ž์‹->๋ถ€๋ชจ ๋Š” ์•ฝํ•œ์ฐธ์กฐ ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.
2. ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์˜์กด์„ฑ ์ค„์ด๊ธฐ
3. ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋กœ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์†Œํ†ต -> ์„œ๋กœ ์ฐธ์กฐํ•  ํ•„์š” ์—†๋‹ค.

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)


์ถœ์ฒ˜: ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

0๊ฐœ์˜ ๋Œ“๊ธ€