### 🎮 Project #1: "Memory Defense" (메모리 디펜스)

**1. 사용 엔진:** **Unity** (2D/3D 무관, 빠른 구현을 위해 2D 추천)

**2. 게임 기획 (테마 및 룰):**
매우 단순한 형태의 '원 스크린(One-Screen) 슈팅/디펜스' 게임입니다.
*   **플레이어:** 화면 중앙에 고정되어 있습니다. (마우스 방향을 바라보게 하면 좋습니다)
*   **적:** 화면 밖 사방에서 플레이어를 향해 끊임없이(그리고 점점 많이) 몰려옵니다.
*   **공격:** 마우스를 클릭하면 총알이 날아가 적을 파괴합니다.
*   **목표:** 적에게 닿기 전까지 최대한 오래 버티며 점수를 올립니다.

**3. 🛠️ 기술 미션: "Instantiate / Destroy 사용 금지!"**
이번 프로젝트의 핵심입니다. 유니티에서 게임이 플레이되는 도중에는 **절대** `Instantiate`(생성)와 `Destroy`(파괴) 함수를 호출해서는 안 됩니다.

*   **해결 방법:** **오브젝트 풀링(Object Pooling)** 패턴을 직접 구현하세요.
*   **세부 제약:** 
    1. 게임이 시작될 때(Start 또는 Awake), 미리 총알 50개, 적 100개 등을 생성해두고 비활성화(`SetActive(false)`) 해둡니다.
    2. 총알을 쏘거나 적이 스폰될 때, 새로 생성하는 것이 아니라 **풀(Pool)에서 꺼내와서 활성화**시킵니다.
    3. 적이 죽거나 총알이 화면 밖으로 나가면, 파괴하는 것이 아니라 **다시 비활성화하여 풀에 반환**합니다.

**💡 연우 님을 위한 기술적 TMI (왜 이걸 하나요?)**
Java와 C# 같은 가비지 컬렉터(GC) 기반 언어에서는, 런타임 중 잦은 메모리 할당(동적 생성)과 해제가 발생하면 메모리 파편화가 일어나고, 어느 순간 GC가 작동하며 게임에 렉(Spike)이 발생합니다. 최적화와 엔진의 동작 원리에 관심이 많은 연우 님이라면, 이 메모리 관리의 기초를 뼈저리게(?) 느껴보는 것이 아주 중요합니다.

---

**마인드셋 팁:**
*   그래픽은 동그라미, 네모 같은 유니티 기본 도형(Sprite)만 써도 전혀 상관없습니다. 기획과 아트는 타협하세요!
*   핵심은 **"오브젝트 풀링 구조를 내가 얼마나 깔끔하게 코드로 짰는가?"** 입니다. (예: Queue를 썼는가, List를 썼는가? Generic 타입으로 만들어서 적과 총알 모두 호환되게 만들었는가?)