많은 사람들이 설계를 이렇게 착각한다:
“이 시스템이 어떻게 동작할지를 미리 결정하는 것”
❌ 잘못된 접근
“Player 클래스 만들고… Weapon 클래스 만들고…” ⭕ 올바른 접근 “플레이어는 뭘 할 수 있지?” 예:
text입력 → 처리 → 결과
예 (배드민턴 게임 느낌으로):
text입력 (타격) → 물리 계산 → 셔틀콕 이동 → 충돌 판정 → 점수 처리
👉 이 단계에서 이미 70% 설계 끝남이게 설계의 핵심이다.
“이 동작은 누가 책임져야 하는가?” 예: | 기능 | 책임 주체 || ----- | ------------- || 입력 처리 | Player || 물리 계산 | PhysicsSystem || 점수 계산 | GameManager || UI 표시 | UIManager | 👉 규칙:
❌ 안 좋은 예
csharpclass Player { int hp; void Update() { // UI도 하고, 물리도 하고, 공격도 하고... }}
⭕ 좋은 방향
csharpPlayer (데이터)PlayerController (입력 처리)CombatSystem (전투 로직)
👉 이렇게 하면:
👉 중요한 질문:
“이걸 다른 방식으로 바꿔야 하면?” 예:
csharpinterface IPlayerInput { Vector2 GetInput();}
👉 구현체:이거 진짜 중요하다:
→ “혹시 나중에…” 하다가 과설계 👉 해결:
지금 필요한 만큼만 설계 + 확장 가능하게
코드 말고 이렇게 설명 가능해야 한다:
“입력 받으면 → 이 시스템이 처리하고 → 결과를 여기로 넘겨서 → 점수 계산됨” 👉 막히면 설계 안 된 상태
TDD를 쓰면 자동으로:
설계 = “누가 무엇을 책임지고, 어떻게 연결되는지 결정하는 것”
원하면👉 네가 만들고 있는 배드민턴 게임 기준으로 실제 설계 구조(서버/클라 분리 포함)도 구체적으로 같이 잡아줄게.