Java 숫자야구

2022. 10. 21. 18:47JAVA

수업을 따라 숫자 야구를 구현하며 객체지향적으로 코드를 작성하는 시간을 가졌다.

설계도와 로직

위 그림은 https://excalidraw.com/에서 그렸다. 강사님이 사용하시길래 들어가서 사용해봤는데 사용법이 간단해서 꽤 좋았다. 

객체지향적으로 설계를 위해서는, 역할과 책임의 분리가 중요하다. 
이번 실습에서는 역할(관심사)에 따라 클래스로 분리했다.

또, 변경의 여지가 있는 부분은 전부 인터페이스로 설계했다.

역할에 따라 분리한 클래스

1. Baseball Class: 핵심 비즈니스 로직을 수행
2. Input: 사용자의 입력 처리
3. Output: 결과 반환 
4. Numbers: 숫자 저장
5. NumberGenerator: 랜덤한 숫자 생성
6. BallCount: 스트라이크, 볼의 개수 관리 

이정도로 나눌 수 있다.

변경의 여지가 있는 부분(인터페이스 설계)

Input, Output 등 I/O 작업과
랜덤한 숫자를 생성하는 NumberGenerator는 구현 방법을 추후에 변경 가능하도록 인터페이스로 설계했다.

이번 수업에서는 간단히 Scanner로 입력받고 System.out.println으로 출력하였으므로
Input과 Output은 Console이라는 구현체를 사용했다. 

NumberGenerator는 Faker라는 외부 라이브러리를 사용하는 FakerNumberGenerator를 구현체로 사용했다.
나중에 Math.random() 등의 메소드로 변경하고 싶다면, NumberGenerator 타입의 MathNumberGenerator 을 구현하면 될 것이다.

마지막으로, 핵심 로직을 수행하는 Baseball 클래스는
어떤 외부 라이브러리에도 의존해서는 안된다. 
얽히는 순간 외부에 의해 수정되거나 핸들링 될 여지가 생기기 때문이다. 
따라서 Faker라는 외부 라이브러리를 Baseball 클래스가 아닌 FakerNumberGenerator에서 사용하고 있는 모습이다.

코드는

https://github.com/rlarltj/NumberBaseball

 

GitHub - rlarltj/NumberBaseball: 숫자야구 소스코드

숫자야구 소스코드. Contribute to rlarltj/NumberBaseball development by creating an account on GitHub.

github.com

 

'JAVA' 카테고리의 다른 글

JIT compiler  (2) 2022.12.11
Java - Calculator 과제 회고  (0) 2022.10.30
Collection과 Iterator  (0) 2022.10.20
JAVA 인터페이스 기능과 디폴트 메소드(Default Method)  (0) 2022.10.20
Java equals()와 hashCode()  (0) 2022.10.19