티스토리 뷰

🟩 오늘의 목표

  • 코드의 작성 순서(선언→정의)와 실행 순서(Main→호출)의 차이를 명확히 이해한다.
  • 클래스(Class)의 캡슐화와 오버로딩을 통해 안전하고 유연한 객체를 설계한다.
  • 템플릿(Template)과 new/delete를 사용하여 타입에 독립적이고 메모리를 직접 관리하는 인벤토리를 구현한다.

 

🟧 1. 코드의 작성 vs 실행 흐름 (Process)


🟦 작성 순서 (Top-Down)

  • 선언 > 정의 > 실행: 코드는 위에서 아래로 읽히므로, 컴파일러가 알 수 있게 선언을 먼저 하고 정의를 채운 뒤 Main에서 사용한다.

🟦 실행 순서 (Jumping)

  • Main 함수 중심: 프로그램이 시작되면 Main 함수의 지역 변수(Stack)들이 생성자(Constructor)를 통해 만들어진다.
  • 호출과 복귀: 함수를 호출하면 실행 흐름이 해당 정의부로 점프하고, 실행이 끝나면 다시 Main으로 복귀한다.
  • 생명 주기: Main이 종료되기 직전, 스택에 있던 객체들의 소멸자(Destructor)가 호출되며 프로그램이 마무리된다.

 

🟧 2. 클래스 설계와 캡슐화 (Item 클래스)


🟦 정보 은닉 (Encapsulation)

  • private: itemName, itemPrice 같은 중요 데이터는 숨겨서 외부의 임의 변경을 막는다.
  • public (Getter): GetItemName() 등을 통해서만 값을 꺼낼 수 있게 하여 데이터 무결성을 지킨다.

🟦 생성자 오버로딩 (Constructor Overloading)

  • 다형성: 이름이 같은 함수를 여러 개 만드는 기법.
    • Item(): 빈 껍데기를 만드는 기본 생성자.
    • Item(name, price): 값을 바로 세팅하는 매개변수 생성자.

 

🟧 3. 템플릿과 동적 배열 (Inventory 클래스)


🟦 템플릿 (Template)

  • 범용성: template<typename T>를 사용해 인벤토리를 "빵틀"처럼 만들었다.
  • 지금은 Inventory<Item>이지만, 나중에 Inventory<Weapon>처럼 내부 타입만 갈아 끼워 재사용할 수 있다.

🟦 동적 할당과 관리 로직

  • 공간 확보: pItems = new Item[capacity]로 힙(Heap) 영역에 필요한 만큼 공간을 만든다.
  • 가짜 삭제: RemoveLastItem은 실제로 메모리를 지우는 게 아니라, size 변수만 1 줄여서 데이터가 없는 척 처리하는 효율적인 방식이다.

 

🟧 4. 메모리 관리 (Heap vs Stack)


🟦 생성과 소멸의 짝 (Pair)

  • new로 만들었으면 반드시 delete로 지워야 한다.
  • 특히 배열(new [])을 할당했다면 소멸자에서 반드시 **delete []**를 호출해야 **메모리 누수(Memory Leak)**를 막을 수 있다.

🟦 스택 vs 힙

  • 스택(Stack): Item item; 처럼 선언하면 함수 종료 시 자동으로 삭제된다.
  • 힙(Heap): new Item(); 처럼 선언하면 개발자가 직접 delete 할 때까지 살아있다.

 

🟫 오늘 느낀 점

작성 순서와 다른 실행 흐름을 추적하며, 템플릿과 new/delete를 활용한 범용 인벤토리 구현을 통해 메모리 관리의 핵심을 익혔다.

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

TIL - 18일차  (0) 2025.12.23
TIL - 17일차  (0) 2025.12.22
TIL - 15일차  (1) 2025.12.18
TIL - 14일차  (0) 2025.12.17
TIL - 13일차  (0) 2025.12.16