4acd506b7c594654f2c92be8944e2e05511033d8
사전 과제
파일 구성
| 파일 | 역할 |
|---|---|
Core/ComponentBase.cs |
Unity MonoBehaviour의 대역 |
Core/IHealthView.cs |
HP등을 읽을 수 있는 인터페이스 |
Core/Health.cs |
HP를 구현한 클래스. IHealthView 구현, TakeDamage(피격데미지)/Revive(부활) |
Battle/BattleManager.cs |
게임 진행 시간(CurrentGameSeconds) |
Battle/AttackType.cs |
공격 타입 |
Units/Unit.cs |
모든 유닛의 추상 클래스ㅓ. Health 소유, IHealthView 노출 |
Units/Champion.cs |
죽으면 일정 시간 후 부활 |
Units/Minion.cs |
죽으면 소멸, 생성 시 게임 시간 비례 공격력 |
Units/Tower.cs |
죽으면 영구 파괴(잔해는 남음) |
UI/HPBar.cs |
임의 대상의 HP를 '보여주는' UI. IHealthView만 참조 |
과제 (1) — 유닛 3종
공통점(HP 소유·데미지·사망 흐름)은 Unit에 모으고, 초기화는 `Awake → Init()
| 유닛 | 요구사항 | 구현 |
|---|---|---|
| Champion | 죽으면 일정 시간 후 부활 | Revive() |
| Minion | 죽으면 소멸 / 생성 시 시간 비례 공격력 | OnDied → Destroy()(오브젝트 제거). Init에서 GetAtkByGameTime(BattleManager.CurrentGameSeconds)로 공격력 세팅 |
| Tower | 영구 파괴 여부를 저장 | OnDied 기능 정지/잔해 전환. 오브젝트(흔적)는 남고, 부활 로직이 없어 영구 파괴 |
과제 (2) — 분리
의존 방향을 한쪽으로만 (유닛 → HPBar 의존: 0)
Champion/Minion/Tower ──소유──▶ Health ──구현──▶ IHealthView ◀──구독──── HPBar
(Units) (Core) (Core) (UI)
의존 방향: UI → Core, Units → Core, Units → Battle
- 작동(코어) =
Health: 데미지/회복/사망을 실제로 처리하는 클래스. UI를 전혀 모르며, 상태 변화는HPChanged/Died이벤트로만 알림. - 표시 =
HPBar:IHealthView(읽기 전용)만 참조. - 연결 : 유닛이 프로퍼티로
IHealthView를 노출하고, 유닛은 HPBar를 전혀 참조하지 않습니다.
이점
- 양방향 무의존 — 유닛은 UI를, UI는 구체 유닛을 모름
- 임의 대상 반영 —
IHealthView만 만족하면 무엇이든 표시 가능. - 항상 최신 상태 —
Bind시 1회 즉시 반영, 이후 변화 시점에만 갱신.
특이사항
AttackType: 물리/마법 등 데미지 타입별 분기로 확장할 것을 고려.- 스탯은 외부 주입 전제 :
MaxHP/Atk등 실제 수치는 외부에서 주입하는 것을 전제.
적용 패턴
- Template Method —
Init/OnDied/GetAttackDamage로 유닛별 차이만 분리 - Observer —
HPChanged/Died이벤트로 코어 → 표시 단방향 통지 - Interface Segregation —
IHealthView로 UI에는 읽기/구독 책임만 노출
Description
Languages
C#
100%