# 🛠️ CombatSystem: [[Reference|Reference]]Error Re[[Solution|Solution]] Guide

## 1. Context (배경)
전투 시스템(`CombatSystem.ts`) 리팩토링 중, 런타임에서 엔진이 중단되는 치명적인 참조 오류가 발생하였습니다. 본 문서는 해당 오류의 원인과 해결 방법, 그리고 향후 유사 사례 방지를 위한 가이드라인을 기록합니다.

## 2. Issue Breakdown (오류 분석)
- **Error Type**: `ReferenceError: damage is not defined`
- **Location**: `CombatSystem.ts` (Collision Detection Loop)
- **Root Cause**: 블록 스코프(`if/else`) 내부에서 `damage` 변수를 사용하기 전에 `let` 혹은 `const`를 통한 명시적 선언이 누락됨. 자바스크립트의 비엄격 모드 혹은 리팩토링 과정에서의 선언부 유실이 원인이었습니다.

## 3. Resolution (해결 방법)
탄환의 공격력을 계산하기 전, 명시적으로 스코프 내에 변수를 선언하도록 수정하였습니다.
```typescript
// Fix [[Logic|Logic]]
let damage = bullet.dmg; // 명시적 선언 및 초기화
if (isCritical) {
  damage *= criticalMultiplier;
}
```

## 4. Prevention Policy (재발 방지 대책)
- **Strict Declaration**: 모든 변수는 반드시 `const` 또는 `let`을 사용하여 선언하며, 선언되지 않은 변수의 암묵적 전역화(Implicit Global)를 철저히 금지한다.
- **Linter Integration**: `no-undef` 규칙을 강화하여 빌드 타임에서 미선언 변수 참조를 사전에 차단한다.
- **Unit Test**: 충돌 판정 로직에 대한 단위 테스트를 수행하여 데미지 계산 루프의 무결성을 검증한다.

---
**Related Cluster**: Runtime Pipeline
**Last Updated**: 2026-04-23
