문제
이번 과제에서 작성해야 할 로직은 크게 3가지라고 생각했다.
- 데이터를 읽고 쓰는 로직
- 캐릭터와 몬스터의 정의
- 게임의 정의
따라서, 이 파일들을 어떻게 해야 효율적으로 상호작용하게 구조를 짤수 있을지 고민했다.
고민과 적용
- 데이터는 어디에 둘 것인가
데이터는 외부에 존재하며, 특정 함수를 통해서만 읽고 쓰기에 접근할 수 있어야 한다. 따라서 assets/db에 따로 빼서 적어두자고 생각했다.
- 그 데이터는 어디에서 부를 것인가
지금은 각각의 데이터를 부르고 쓰는 함수가 한번밖에 사용이 되지 않지만, 규모가 커져서 특정 데이터를 중복 조회하게 될 경우가 생길 수 있을 것이라고 생각해, 데이터만 읽고 부르는 함수를 따로 분리해 lib/helper에 따로 적어두었다.
- 클래스 정의는 어디에 할 것인가
프로그래밍에서 lib(라이브러리)는 프로그램이 사용하는 비활성 자원의 모임이라고 한다. 나는 이것을 클래스, 자료형, 미리 작성된 코드 등의 모듈들을 두고 필요에 따라서 꺼내 사용할 수 있는 코드들을 모아놓은 곳이라고 이해했다. 따라서 lib/class에 따로 모아두었다.
- 반복되거나 그럴 가능성이 있는 함수는?
3번에서 말한 것처럼 모듈들을 따로 모아놓는 곳이 lib라고 이해했는데, 클래스와 달리 단일 기능만을 수행하는 함수들이 존재하게 될 경우 class 디렉토리에 두기는 적절하지 않다고 생각했다. 그래서 특정 단일 기능을 수행하는 함수는 lib/utils에 따로 정리해두었다.
- 나름 정리가 된 디렉토리 모습

결과와 아쉬운 점
- 초반부터 이렇게 구분을 해서 사용을 하니, 데이터를 불러오는 것도, util 함수를 사용하는 것도 마치 class의 메서드를 사용하는 것처럼 직관적으로 기능을 이해하고 사용할 수 있어서 좋았다.
- 다만 game 클래스에 battle 메서드 안에 조금 더 분리하고 구분할 수 있을 가능성이 있는 함수들이 많다고 생각했는데, 논리 구조를 짜는 방식 자체가 짜임새있지 않아서인지, 파일 구분도 더 짜임새있게 구성하지 못했다는 생각이 들어 아쉬웠다.
- 결국! 코드를 잘 짜야 구분도 잘 된다는 사실을 절실하게 깨달았다. 코드가 지저분하면(논리 구조가 깔끔하지 않으면) 구분하기도 힘들다.
- 이래서 알고리즘을 계속 공부해야 하는 거라는 생각이 들었다. 이번 제출 이후에 코드들을 리팩토링 하면서 보다 더 깔끔하게 구분하고 정리할 수 있게 공부해야겠다는 다짐을 하게 되었다.