[C++ Project] ConsoleRPG 프로젝트 회고
6월 18일부터 26일까지 총 9일간, 5명이 모여 C++ 기반의 윈도우 콘솔 RPG 게임을 개발했습니다.
[C++ Project] ConsoleRPG 프로젝트 회고
6월 18일부터 26일까지 총 9일간, 5명이 모여 C++ 기반의 윈도우 콘솔 RPG 게임을 개발했습니다. 저는 이번 프로젝트에서 팀장 역할을 맡아 전반적인 아키텍처 설계와 개발 방향을 주도했습니다. 콘솔 환경이라는 제약 속에서도 객체지향 구조와 소프트웨어 공학 지식을 최대한 활용해 협업 가능한 시스템을 구축하고자 했습니다.
짧은 기간에도 불구하고 프로젝트가 원활히 진행될 수 있었던 이유는, 역할을 명확히 분리하고 객체지향 설계 원칙(SOLID) 및 디자인 패턴을 적극적으로 활용했기 때문입니다. 이 글에서는 프로젝트에서 적용한 기술과 설계 방법을 중심으로 내용을 공유합니다.
적용 기술 및 설계
객체지향 설계 원칙 (SOLID)
- 단일 책임 원칙 (SRP): 각 클래스는 한 가지 역할에 집중하도록 설계
- 개방-폐쇄 원칙 (OCP): 새로운 캐릭터나 몬스터를 추가해도 기존 코드는 수정하지 않도록 설계
- 의존성 역전 원칙 (DIP): 하위 모듈이 상위 모듈을 의존하지 않도록 인터페이스 기반 구조 적용
주요 디자인 패턴 활용
패턴 역할
- Singleton: 이벤트 매니저, 콘솔 렌더러 등 전역 인스턴스 관리
- Observer: 이벤트 시스템 구현 (구독-발행 구조)
- Factory: 몬스터를 레벨에 따라 동적으로 생성
- Strategy: 아이템 효과를 런타임에 변경 가능하게 설계
구조적 설계
- CRGameSystem: 최상위 관리자 역할, 각 시스템 모듈 초기화 및 흐름 제어
- CRGameMode: 게임 전체 진행 로직 관리
- CRConsoleUI: 텍스트 기반 UI 처리
- CRCombatManager: 캐릭터와 몬스터의 전투 처리
- ICRCombat 인터페이스: 캐릭터와 몬스터의 공통 전투 기능 제공
현대적 C++ 기법 활용
- 스마트 포인터 (unique_ptr, shared_ptr) 로 메모리 안전성 확보
- 템플릿/람다 함수로 타입 안정성과 유연성 확보
- constexpr를 통한 컴파일 타임 상수 정의
더 자세한 내용은 해당 링크에서 확인해 보실 수 있습니다. -> https://github.com/devsensational/ConsoleRPG
팀원분들과 함께 진행한 KPT 회고
Keep (잘 되었던 점, 이어나가야 할 점)
- 페어 프로그래밍을 통해 서로의 코드를 직접 실행해보고 질문과 토론을 활발히 진행함으로써, 상대적으로 경험이 적은 팀원이 성장할 수 있는 기회를 마련할 수 있었습니다.
- 각자의 역할을 명확하게 분담함으로써 협업 과정에서 충돌이 발생하지 않았고, 전반적인 작업 효율성을 높일 수 있었습니다.
- 프로젝트 프레임워크가 기능별로 잘 모듈화되어 있어, 각 파트를 독립적으로 개발하고 빠르게 병합할 수 있었습니다.
- 클래스 간 결합도를 낮추고 책임을 분산한 구조 덕분에 개발 속도는 물론 유지보수 측면에서도 긍정적인 결과를 얻을 수 있었습니다. 이러한 구조는 이후 프로젝트에서도 지속적으로 활용할 가치가 있습니다.
- 소프트웨어 공학 지식을 적극적으로 활용하여 구조 설계 및 개발 과정에서 합리적인 의사결정을 내릴 수 있었던 점도 만족스러웠습니다.
Problem (문제였던 점, 개선이 필요한 부분)
- 팀원 간 기량 차이로 인해 일부 팀원이 프로젝트에 충분히 기여하지 못한다고 느껴지는 경우가 있었습니다.
- 협업 도구(Git, 이슈 트래커 등)에 대한 숙련도가 부족하여 프로젝트 진행 중 충돌이나 작업 누락 등의 문제가 발생하기도 했습니다.
- 코드 컨벤션에 대한 공통된 합의가 부족하여 코드의 일관성과 가독성 측면에서 다소 어려움이 있었습니다.
Try (개선 방안 및 실행 가능한 시도들)
- 여유 시간이 생길 때 개인적으로 코드 구현 연습, 자습, 혹은 간단한 사이드 프로젝트를 통해 개발 역량을 향상시키는 노력이 필요합니다.
- 코드 리뷰 및 회의 시 코드 컨벤션에 대한 기준을 명확히 정하고 이를 적극적으로 공유하여, 전체 코드의 일관성을 유지할 수 있도록 하겠습니다.
- 협업 도구에 대한 이해도를 높이기 위해 개인 프로젝트 등을 통해 실습 경험을 쌓고, 실전에서의 활용 능력을 높이도록 하겠습니다.
마치며
이번 프로젝트는 단순히 콘솔에서 동작하는 게임을 만드는 것을 넘어서, 실제 게임 개발에서 중요한 아키텍처 설계와 패턴 적용 경험을 쌓을 수 있는 좋은 기회였습니다.
특히, 이벤트 기반 구조와 모듈화된 설계 덕분에 짧은 시간 동안 팀원들이 충돌 없이 독립적으로 기능을 개발할 수 있었으며, 유지보수와 확장 측면에서도 유리한 구조를 갖출 수 있었습니다.
앞으로도 이런 미니 프로젝트를 통해 다양한 설계 패턴과 소프트웨어 공학 지식을 실전에 적용해보며, 협업과 설계 양면에서 한 단계씩 성장해나가고자 합니다.
This post is licensed under CC BY 4.0 by the author.