티스토리 뷰

🟩 오늘의 목표

  • 메모리 누수와 자원 관리의 중요성을 이해한다.
  • 스택(Stack)과 힙(Heap)의 차이를 알고 동적 할당을 올바르게 수행한다.
  • 스마트 포인터(unique_ptr, shared_ptr)를 활용해 안전한 코드를 작성한다.
  • 언리얼 엔진의 가비지 컬렉션과 리플렉션 시스템을 이해한다.

 

🟧 1. 메모리 구조 (Stack vs Heap)


🟦 스택 (Stack)

  • 함수 내 지역 변수가 저장됨.
  • 스코프(})가 끝나면 자동으로 메모리가 회수되어 관리가 편함.
  • 공간이 한정적임.

🟦 힙 (Heap)

  • 사용자가 new로 할당하고 delete로 해제하는 공간.
  • 메모리 크기와 수명을 유연하게 관리 가능.
  • 위험 요소:
    • Memory Leak (누수): delete를 안 해서 쓰레기 메모리가 쌓임.
    • Dangling Pointer: 이미 해제된 주소를 계속 참조함.

 

🟧 2. 스마트 포인터 (Smart Pointer)


🟦 개념

  • 직접 delete 하지 않아도, 스코프를 벗어나면 자동으로 메모리를 해제해 주는 C++ 기능.

🟦 종류와 특징

  1. unique_ptr (독점): 객체를 오직 하나의 포인터만 소유. 복사 불가, 이동(move)만 가능.
  2. shared_ptr (공유): 여러 포인터가 객체를 공유. 참조 카운트(Ref Count)가 0이 되면 자동 해제.
  3. weak_ptr (관찰): shared_ptr의 순환 참조 문제를 막기 위해 사용. 카운트를 올리지 않고 관찰만 함.

 

🟧 3. 복사의 종류


🟦 얕은 복사 (Shallow Copy)

  • 주소값만 복사함. 원본과 사본이 같은 메모리를 가리켜서 위험함(Dangling Pointer 발생 가능).

🟦 깊은 복사 (Deep Copy)

  • 실제 데이터를 새로운 메모리에 복사함. 원본과 사본이 완전히 독립적이라 안전함.

 

🟧 4. 언리얼 엔진의 메모리 관리


🟦 가비지 컬렉션 (Garbage Collection)

  • Mark and Sweep: 주기적으로 메모리를 검사하여 사용하지 않는 객체(Mark가 없는 객체)를 자동으로 청소함.
  • 개발자가 일일이 delete 할 필요가 없음.

🟦 리플렉션 (Reflection)

  • C++ 클래스 정보를 엔진이 알 수 있도록 등록하는 시스템.
  • 매크로: UCLASS(), UPROPERTY(), UFUNCTION() 등을 사용해야 GC가 관리할 수 있음.

 

🟫 오늘 느낀 점

  • 메모리 관리의 까다로움과 스마트 포인터의 필요성을 깨닫고, 언리얼 엔진의 자동 관리 시스템이 주는 편리함과 그 기반 기술을 이해했다.

'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글

TIL - 17일차  (0) 2025.12.22
TIL - 16일차  (0) 2025.12.19
TIL - 14일차  (0) 2025.12.17
TIL - 13일차  (0) 2025.12.16
TIL - 12일차  (0) 2025.12.12