게임 프로젝트 Chapter 2 (공통 모듈 설계)
common 모듈 설계
common 모듈 목적
common 모듈은 두 가지 목적으로 만들어졌다. 첫번째 목적은 모든 모듈이 공통적으로 사용할 수 있는 기능들을 제공하기 위함이고, 두번째는 game 모듈과 각 게임 하위 모듈 간의 상호 의존을 해결하기 위함이다. 상호 의존을 해결하기 위해서는 두 모듈 사이에 인터페이스를 두어야 하는데 그 역할을 common 모듈에 담았다.
설계 상세
common 패키지
예외
모든 모듈에서 사용하는 예외를 정의한다. 대표적으로 사용자 입출력에서 발생하는 예외가 있다.
사용자 입출력
각 게임에서 사용자의 입력을 받거나 사용자에게 문자를 출력할 때 필요한 기능들을 정의한다.
사용자 입출력은 IOProcessor
클래스에서 다루며 객체를 굳이 생성할 필요가 없으므로 모든 메서드가 정적으로 되어 있는 유틸 클래스로 설계했다.
IOProcessor
클래스의 사용자 입력을 받기 위한 유용한 메서드를 제공하는데
readLine
메서드는 사용자의 입력을 검증하거나 필요하다면 원하는 객체로 변경할 수 있도록 한다.
interfaces 패키지
interfaces 패키지는 game 모듈과 게임 하위 모듈 간의 상호 의존을 해결하기 위한 인터페이스 집합이다.
game 모듈에서 각 게임을 사용하기 위한 Game
인터페이스와 common 모듈에서 사용할 Validator
인터페이스가 있다.
각 게임 하위 모듈은 Game
인터페이스를 반드시 구현해야 게임을 진행할 수 있고,
필요하다면 Validator
인터페이스를 구현해서 사용자 입력을 효율적으로 다룰 수 있다.
회고
느낀점
인터페이스를 통해 기능의 정의와 구현을 왜 분리하는지 좀 알 것 같다. 상위 모듈에서는 인터페이스를 통해 각 기능들을 사용만 하면서 틀을 잡고, 하위 모듈에서 구현하는 방식으로 개발을 하니 여러 가지를 신경쓰지 않고 하나에만 집중해서 개발할 수 있어 훨씬 개발하기 편했다.
와일드카드를 사용하는 것이 메서드를 더 유연하고 범용성 있게 만들어 주는 것을 체감했다.
IOProcessor
클래스 같은 유틸 클래스는 공통적으로 사용되는 범용 클래스이므로 다양하게 사용될 수 있도록 와일드카드를 사용했는데 만족스럽다!