- 객체지향 설계 및 구현 연습
- Enum의 사용
- 다형성 활용
- JUnit을 통한 단위 테스트 & 테스트 코드 작성
- 코드리뷰 스터디를 통한 피드백 & 코드 개선
- 승용차: 일반 차량 , 전기차(충전 가능)
- 승용차: 최초 30분 2000원, 추가 10분당 1000원
- 버스: 승객수에 따라 대형(40인승↑) , 중형(24 ~ 40인승) , 소형(24인승↓) 으로 나뉨
- 대형: 최초 1시간 5000원, 추가 30분당 3000원
- 중형: 최초 1시간 4000원, 추가 30분당 2000원
- 소형: 최초 1시간 3000원, 추가 30분당 1000원
- 트럭: 중량에 따라 대형(10톤↑) , 중형(5 ~ 10톤) , 소형(5톤↓) 으로 나뉨
- 대형: 시간당 4000원
- 중형: 시간당 3000원
- 소형: 시간당 2000원
※ 전기차량의 충전요금 : 1kwh당 200원(소수점 X) --- 구현 X ...
- 입차: 차량의 입차 정보(차량 번호, 차량 종류, 입차 시간)
- 출차: 차량의 출차 정보(차량 번호, 출차 시간), 총 요금 계산
- 주차 차량확인: 주차되어 있는 모든 차량의 종류별 입차시간을 정렬하여 보여줌
- 차량은 승용차, 버스, 트럭 순으로 보여줌.
- 출력할 차량 정보는 차량 종류, 차량 번호, 입차 시간
- 총 수입: 입차 후 출차한 차량에 대한 총 수입
- 프로그램은 메뉴(Menu) 형식으로 작동하며, 무한 반복함
- 차량 번호 - 4자리의 정수
- 시간 정보 - 연,월,일,시,분
- ex) 202011171210
- 주차시간의 계산은 전부 올림 처리하여 계산함
- 승용차의 경우 30분 미만 -> 30분으로 처리하며, 1분~9분 -> 10분으로 처리함
- 충전기의 출력은 12KW이고, 승용차 용량은 60Kwh라고 가정함
- 배터리 완충시 걸리는 시간: 5시간이 소요됨
- 1분에 충전할 수 있는 용량은 0.2kWh 임
- 전기차는 완충될 때 까지 충전한다고 가정함
-
Parking 클래스- 주차장 객체를 생성할 때, 차량의 정보를 저장할 List의 크기를 선언한 채 생성하므로, 외부에서의 유입이 있어선 안됨.
public Parking() { vehicles = new ArrayList<>(Const.PARKING_COUNT); } if (parking.isFullParking(parkingCount)) { --> if (parking.isFull()) {
-
Main 클래스- menu 를 입력받고 선택하는 부분은 상수로 정의해서 가독성을 증가시키는게 좋음
if (menu == 1) --> if (menu == Menu.INPUT_CAR)
-
OutputView 클래스
출력행위를 위한 클래스로, 모든 메서드가 static 으로 선언되어 있는데 현 상태는 생성자를 만들어서 의도치않게 사용할 가능성이 있음생성자를 private으로 설정하여 위 부분에대한 실수를 사전에 방지함
- 모든 print 관련된 메서드들을 한 클래스에 때려박다보니... 한 클래스가 너무 커짐(God Class)
- print 출력문도 관련성이 있는 부분으로 나누어서 OutputView 클래스를 추상화하고, 하위 클래스에서 상속받는 식으로 설계하는것도 좋을듯함
-
Bus, Truck 클래스- 디폴트 생성자를 public으로 열어두었는데, 이부분은 제거하거나 private으로 막으면 더 좋을듯 함
- 기본 생성자로 객체가 생성되는걸 막고자 하기 위해서..
- 생성자를 오버로딩하는 것 보다 Builder(빌더)패턴 등을 이용하여 강제성을 주는것도 좋을듯
- 생성자에 파라미터가 많아질수록, 혼돈할 염려가 있기 때문
- 디폴트 생성자를 public으로 열어두었는데, 이부분은 제거하거나 private으로 막으면 더 좋을듯 함
-
BusPrice 클래스
- 아래와 같이 타입을 강제하는것이 좋을듯 함
- Bus가 아닌 다른 객체(Truck, Car) 클래스에서 잘못 사용할 염려가 있음
- Truck이 Bus 요금으로 정산해버리는 일이 발생할 수 있음
BusPrice<? extends Bus>
- 아래와 같이 타입을 강제하는것이 좋을듯 함
-
Enum Type- Enum의 생성자에 Description을 주면 의미가 더욱 명확해질듯 함
LARGE_BUS(5000, 3000) -> LARGE_BUS(5000, 3000, "대형 버스")