1. 내가 담당한 구현 기능
이번 팀 프로젝트에서 저는 플레이어의 핵심 성장 루프인 '캐릭터 스탯 관리'와 '대장간 강화 시스템'의 설계를 맡았습니다.
- PlayerCharacter 클래스 및 스탯 시스템 구현
- 플레이어의 레벨, 경험치, 공격력, 체력 등 핵심 데이터를 은닉화(private)하고 관리하는 본체 구조 설계.
- 장비 장착 및 해제 시 캐릭터 스탯에 실시간으로 가중치가 반영되는 연동 시스템 구현.
- 대장간(Smithy) 강화 시스템 로직 설계
- 플레이어가 모은 재화(골드, 강화석 등)를 소모하여 보유한 무기/갑옷 등의 장비를 강화하는 콘텐츠 구현.
- 강화 단계가 올라갈 때마다 아이템의 기본 스탯(Stats)을 유동적으로 상승시키는 성장 공식 적용.
2. 기술적 핵심 인사이트
코드를 분석하고 결합하는 과정에서 객체지향 설계(OOP)와 메모리 관리에 대한 깊이 있는 이해를 얻었습니다.
- 객체 수명 주기와 소멸자 활용 (Composition 관계)
- 클래스 다이어그램에서 PlayerCharacter와 Inventory가 강한 합성 관계($\blacklozenge$)로 묶여 있음을 코드로 확인했습니다.
- 인벤토리가 아이템의 주소값을 담는 포인터 벡터(std::vector<Item*>)로 구현되어 있을 때, 캐릭터만 delete하면 실제 아이템 객체들이 메모리에 남아 메모리 누수(Memory Leak)가 발생한다는 점을 짚어냈습니다.
- 이를 해결하기 위해 Inventory 소멸자에서 반복문을 돌며 실제 아이템들을 명확히 해제(delete)해 주는 연쇄 소멸(Cascade) 구조의 중요성을 체득했습니다.
- 싱글톤 & 팩토리 패턴 기반의 협업
- ItemManager나 GameManager처럼 프로그램 전역에서 단 하나만 존재해야 하는 객체에 싱글톤 패턴을 적용하여 전역적인 데이터 접근성을 높였습니다.
- 아이템 생성 로직을 CreateItem 함수 하나로 캡슐화한 팩토리 패턴 덕분에, 팀원들이 각자 코드를 짤 때 구체적인 자식 클래스(포션, 강화석 등)를 몰라도 최상위 부모인 Item* 바구니로 안전하게 데이터를 주고받을 수 있음을 이해했습니다.
3. 프로젝트 총평 및 회고
- 효율적인 타임 매니지먼트: 일주일이라는 짧은 기간이었지만, 무작정 달리기보다 3일은 확실히 쉬고 4일 동안 집중해서 작업하는 전략을 택했습니다. 아침에 할 일을 명확히 나누고, 낮 동안 수시로 소통하며, 저녁에는 작업물을 맞추고 조립하는 루틴을 유지한 덕분에 일정 지연 없이 깔끔하게 과제를 완수했습니다.
- 안정적인 버전 관리: 메인 브랜치에 코드를 무작정 바로 합치지 않고, dev 브랜치를 거쳐 검증된 버전만 main에 병합하는 Git 워크플로우를 경험하며 협업의 안정성을 높였습니다.
겪었던 시행착오와 깨달은 점
- 머지 충돌(Merge Conflict): 작업 도중 베이스 브랜치가 서로 다른 상태에서 머지를 시도하다가 코드가 충돌하는 경험을 했습니다. 다행히 가이드라인과 체크리스트 덕분에 조기에 해결할 수 있었습니다.
- 동일한 기획, 다른 해석: 이번 과제를 통해 가장 크게 깨달은 점은 "사람은 같은 글을 보더라도 서로 다르게 생각할 수 있다"는 사실이었습니다. 제공된 체크리스트가 있었음에도 각자 아는 지식과 관점이 다르다 보니 완전히 다른 해석의 코드가 나오기도 했습니다.
앞으로의 다짐
"모든 팀원이 똑같은 그림을 상상할 수 있도록 기획을 세분화하는 것뿐만 아니라, 코드를 작성할 때도 '남이 알아보기 쉬운 코드'를 짜는 연습을 체화하겠습니다. 직관적인 변수·함수 네이밍 규칙을 준수하고, 코드가 구현된 '이유'를 명확히 전달하는 주석 습관을 길러 협업 효율을 극대화하는 개발자가 되겠습니다."
'TIL' 카테고리의 다른 글
| [C++] 객체지향 프로그래밍: 옵저버 패턴(Observer Pattern) 구현 (1) | 2026.06.02 |
|---|---|
| [C++] 배치고사 틀린문제 복습 (0) | 2026.06.01 |
| [C++] 문자열 대소문자 변환 구현 및 탐색적 학습 방법론 (0) | 2026.05.28 |
| [C++]2차원 벡터(Vector)의 개념과 활용 (0) | 2026.05.27 |
| [C++]텍스트RPG를 만들면서 알게된 개념과 트러블슈팅 (0) | 2026.05.26 |