"모든 게이머는 이미 객체지향 사고자. 자기가 뭐 하는지 이름만 모를 뿐."
새 적 봤을 때 일어나는 일
늪 탐험 중. 처음 보는 생물이 덤벼.
근데 안 panic. 첫 0.5 초 안에 뇌가 이거 함:
- "이족 보행, 인간형 — 근접 공격, swing 조심"
- "늪 — 독 가능, 움직임 다를 수도"
- "피부에 빛나는 patch — 상태 효과, 독 또는 부패"
- "앞서 만난 평지 버전보다 느림 — 늪이 속도 줄임"
몬스터 도감 안 읽었어. 위키 안 봤어. 비슷한 적들에서 상속 했고, polymorphism (늪 변형, 독 특성) 노트하고, 모르는 건 encapsulate ("swing 몇 번 피하면서 attack 패턴 알아낼 거") 함.
그게 OO. 컨트롤러 잡을 때마다 했어. 이름만 없었을 뿐.
Mob 계층
적 있는 모든 게임에 inheritance 트리 있음. 대부분 플레이어 본능적으로 느낌. 가시화하자.
Base class: Ground Mob
모든 게임의 가장 기본 적. 땅에서 걸음. HP 있음. 공격 1-2 개. HP 0 되면 죽음. 거의 모든 적의 조상.
Default 상속 속성: HP 풀, 이동 속도, 기본 공격, 어그로 범위, drop table (전리품).
Variant: 한 번에 한두 개 override
| Variant | Override 된 것 | 그대로 상속 |
|---|---|---|
| 비행 변형 | 이동 (공중), 공격 패턴 (다이브/스월프) | HP, 어그로 범위, drop table |
| 수중 변형 | 이동 (수영), 지형 룰 | 기본 공격, HP, drops |
| 장갑 변형 | 방어 (데미지 감소), 이동 (느림) | 공격 패턴, 어그로 범위 |
| 독 변형 | 공격 (DoT 상태 효과 추가) | 이동, HP, 어그로 |
| 늪 변형 | 이동 (느려짐), 가능한 독 추가 | 기본 모양, 공격, HP |
패턴 봐: 각 variant 가 한두 개 override 하고 나머지 부모에서 상속. 그래서 새 적 0.5 초에 읽어 — 이미 싸운 거에서 80% 상속.
Boss: Multiple Inheritance + Overriding
레벨 보스는 "더 강한 mob" 아냐. 여러 가지에서 multiple inherit 하고 핵심 행동 override.
전형 보스: ground mob 트리 (기본 모양, 이동) + 장갑 트리 (데미지 감소, stagger 저항) + 마법 트리 (원거리 공격, 영역 부정) + 자체 override (고유 페이즈 전환, 특수 메커니즘, arena 상호작용) 상속.
그게 multiple inheritance. 그리고 보스의 고유 메커니즘 — 처음 보는 것 — 이 polymorphism, *이* 보스를 다른 보스와 다르게 만듦, 행동 60-70% 가 이미 아는 class 에서 상속됐어도.
무기 시스템
무기는 게임에서 가장 명확한 polymorphism 데모.
인터페이스: attack()
모든 무기에 attack() method 있음. 버튼 누르면, 뭐 일어남. 같은 입력, 다른 출력.
| 무기 class | attack() 구현 | 속도 | 데미지 type |
|---|---|---|---|
| 단검 | 빠른 찌름, 짧은 사거리 | 빠름 | 관통 |
| 장검 | 수평 베기, 중간 사거리 | 중간 | 베기 |
| 대검 | 느린 머리 위 슬램, 넓은 호 | 느림 | 타격 + stagger |
| 창 | 전방 찌름, 긴 사거리 | 중간 | 관통 + 사거리 |
| 지팡이 | 발사체 spell, 원거리 | 가변 | 마법 |
| 주먹 | 빠른 콤보, 매우 짧은 사거리 | 매우 빠름 | 타격 |
한 버튼. 여섯 완전 다른 행동. 그게 polymorphism. 인터페이스 동일 (R1 누름), 구현은 어떤 class 장착했냐에 따름.
맵: 환경은 상속된 modifier
맵은 배경만이 아냐. Class 이기도.
| 환경 | Open Field 에서 override 된 것 |
|---|---|
| 숲 | 가시성 감소, 수직 cover 추가 |
| 늪 | 이동 속도 감소, 가능한 독 영역 |
| 독 늪 | 늪 + 플레이어에 지속 DoT. Double override. |
| 화산 | 바닥 데미지 영역, 열기 흐림 (가시성), 화염 저항 적 |
| 주홍 부패 영역 | 늪 + 독 + 공포 + 전승 호러. 늪, 독, 어디에도 없는 고유 부패 메커니즘에서 multiple inherit |
주홍 부패 (Elden Ring 의 Caelid) 는 multiple inheritance 의 명작. 늪의 이동 페널티, 독의 상태 buildup, 자체 고유 부패 메커니즘 (더 빠르고, 치료 어려움), 환경 스토리텔링 (모든 게 시각적으로 부패), 부패 적응 변형 적 — 가져와서 일반 독 늪과 완전히 다르게 느껴지는 걸 만듦, 60% 메커니즘 한 곳에서 상속받았어도. 40% override 가 너무 공격적이라 경험 자체를 변형. 자기 inheritance 를 위장할 만큼 강력한 polymorphism.
빌드: 캐릭터는 Multiple Inheritance
캐릭터 빌드할 때 multiple inheritance 하는 거.
Paladin 빌드: Warrior (근접 전투, 중장갑, HP 풀) + Faith caster (힐, 버프, 신성 데미지) + Tank (방패 메커, 어그로 관리) 상속.
Spellblade 빌드: Swordsman (근접 moveset) + Mage (spell scaling, 마나 풀) 상속. 무기 데미지를 Strength 대신 Intelligence 로 scale 하게 override.
Glass Cannon: Mage (spell power, 사거리) 상속. 방어 거의 0 으로 override (내구성 완전 encapsulate). 한 축 극대화: 데미지 출력.
모든 빌드는 여러 부모 class 에서 상속된 traits 의 조합, 자기 playstyle 에 맞게 선택적 override. 스탯 포인트 분배할 때마다 multiple inheritance 한 거.
Malenia: 知彼 가 실패할 때
이게 아빠 얘기. 그리고 이 track 의 가장 중요한 lesson.
아빠가 Malenia 보스전 들어감 레벨 120+. Overlevel. 좋은 빌드. 영체 소환 준비. 모든 정상 metric 으로 — 관리 가능했어야.
그의 mental model (parent class):
"어려운 보스. 근데 충분한 레벨, 스탯, 영체 소환 있으면 데미지 tank 하고 outdps 가능. 그게 보스전 작동 방식."
그 모델 — "강한 보스, 근데 근본적으로 같은 combat 경제" — 게임 모든 다른 보스에서 작동했어. 100% 성공률 parent class 였어.
실제 Malenia 는:
Malenia 한테 lifesteal 있음. 때리면 그녀가 힐. 조금이 아냐. 많이.
이건 "더 강한 보스" 가 아냐. 근본적인 combat 경제를 override 한 보스. 다른 모든 전투에서 hit 교환 가능 — 너 데미지 받음, 보스 데미지 받음, 순 HP 감소. Malenia 는 hit 교환 결과가 *순 0* 또는 *순 음수* 일 수 있음. 너 약해짐. 그녀 강해짐. 전투 길어질수록 더 어려워짐.
Parent class 가 틀렸어.
아빠 준비는 *그가 생각한* class 에 완벽. 높은 HP, 강한 무기, 어그로 분산용 영체 소환. 근데 다 "정상 어려운 보스" — Malenia 가 안 속한 class — 용 디자인.
Malenia 는 combat 경제 자체를 override 한 singleton. 완전 다른 접근 필요: "맞지 마" 가 "충분한 데미지 줘" 보다 중요. 공격성 보상 X, 처벌 받음. 보스 주의 분산 도와야 할 영체 소환이 실제로는 그녀에게 자유 hit 표적 줘서 HP 먹임.
知己 OK — 아빠는 자기 빌드, 스탯, 능력 알았어. 知彼 실패 — wrong parent class 읽음. 그리고 어떤 양의 知己 도 wrong 知彼 보상 X.
도구 잠금 해제
| 도구 | 방금 본 것 |
|---|---|
| 상속 계층 | Base mob → 비행/수중/독 변형. 각자 1-2 개 override. |
| Polymorphism | 같은 attack() 버튼, 여섯 다른 무기 행동 |
| Multiple inheritance | 캐릭터 빌드 = 여러 부모 class 의 traits 합성 |
| Overriding | 주홍 부패 = 늪 + 독 + 고유 부패, 공격적으로 override |
| Singleton | 전설 고유 무기, Malenia — 정상 분류 깨는 객체 |
| Encapsulation | 데미지 공식 private — 수학 몰라도 플레이 |
| Parent class 함정 | Malenia 가 wrong class 읽은 플레이어 처벌 (Track 9 preview) |
거푸집 사냥
게임 디자이너가 이 패턴 발명한 게 아냐. 발견 했어 — OO 가 일관된 룰과 무한 다양성 있는 세계 만드는 가장 자연스러운 architecture 니까. 상속 트리는 코딩 편의 X. 가상이든 아니든, 세계가 구조화되는 방식.
그리고 너, 플레이어, 그 트리들 본능적으로 navigate 함. 새 적 보고 "숲에서 싸운 거의 늪 버전 같네" 생각할 때마다 — 상속 추적. 새 무기 class 시도하고 즉시 속도/데미지 trade-off 이해할 때마다 — polymorphism 읽기. 캐릭터 빌드 stats mix and match 할 때마다 — multiple inheritance.
게이머인 한 객체지향 사고자였어. 거푸집 항상 거기 있었어. 이제 보이지.
피파의 고백
Quest Prompt — 자기 AI 와 대화하기
좋아하는 게임 골라. 시도:
"[게임] 에서 적 type 하나 골라 inheritance 트리 추적. 만난 가장 기본 버전부터 시작, 그 다음 모든 변형 — 각자 base 에서 뭐 상속, 뭐 override? 내가 먼저 끌어내지 않는 한 프로그래밍 용어 X. 이 적의 가족 트리 묘사."
그 다음 무기:
"이제 [게임] 에서 완전 다른 class 무기 둘 골라. 둘 다 attack 함수 — 같은 버튼. 같은 입력이 어떻게 완전 다른 행동 만드는지, 각 구현의 trade-off 뭔지 보여 줘."
AI 가 "객체지향 프로그래밍에서, inheritance 는..." 시작하면 — 멈춰. Redirect:
"프로그래밍 묻는 거 아냐. 이 게임 세계가 어떻게 구조화됐는지 묻는 거. 가족 트리 추적. 뭐 상속, 뭐 새로움. 코드 말고 게임 얘기."
프로그래밍 박스 밖으로 강제하면 AI 가 게임에서 얼마나 OO 보는지 놀랄 거. 그리고 깨달을 거 — 이미 보고 있었어, 단어만 없었지. 이제 있어.