게임 프로젝트 Chapter 1 (기초 설계)
게임 프로젝트 기초 설계
평소에도 코딩하는 습관을 들이기 위해 어떤 프로그램을 만들어볼까 고민하다가 게임 프로젝트를 고안했다. 순수 자바를 이용해서 만드는 거지만 좀 더 객체 지향스럽게 설계하고 확장해보는 것을 목표로 프로젝트를 시작하게 되었다.
프로젝트 목적
- 코딩하는 습관 들이기
- 객체 지향적인 개발 해보기
- 모듈화 해보기
설계 상세
모듈 기능을 사용해 각 기능을 독립적으로 개발하도록 설계해 보았다. 처음에는 단순하게 하나의 프로젝트에서 패키지 구분을 통해 오목 게임까지 완성하였고, 이를 각 모듈로 분리하는 작업을 진행해 보았다.
Game module
- 게임 시작부터 진행, 종료까지 진행을 담당하는 모듈
- 어떤 게임을 진행할지 선택 가능
- Common 모듈을 의존함
- Common 모듈에서 제공하는 인터페이스를 통해 각 게임 하위 모듈을 간접적으로 사용
Common module
- 공통 모듈
- 여러 모듈이 공통적으로 사용하는 기능들을 포함
- 각 게임 모듈이 구현해야 하는 인터페이스들을 포함
- Game 모듈과 각 게임 하위 모듈간의 상호 의존을 피하기 위한 중재자 모듈
Omok module
- 오목 게임을 실질적으로 구현하는 하위 모듈
- Common 모듈을 의존하여 인터페이스들을 구현함
회고
느낀점
재밌다. 게임을 만들면서 여러 로직들을 고민해보고 구현하는 것도 재밌지만, 어떻게 하면 객체 지향적으로 설계하고 적용할 수 있는지 고민하는 것도 재밌었다. 추상화를 잘 사용해보려고 노력한 것 같다.
새롭게 알게 된 사실
IntelliJ IDEA에서 모듈을 사용하기 위해서는 *.iml
파일을 다뤄야 한다는 것을 처음 알았다.
각 모듈의 의존성 등과 같은 기능들은 module-info.java
파일만 적어주면 되는줄 알았는데,
이를 IntelliJ IDEA에서 사용하려면 *.iml
파일도 신경을 써줘야 했다.
이거 알아내려고 몇 시간을 고군분투 했는지 모른다.
상호 의존성 문제를 해결하는게 생각보다 쉽지 않다. 왜 인터페이스를 통해 의존하라고 하는지도 조금은 알 것 같다.