Skip to content

jh-project-repo/java_oop-parking-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

😊Java 주차장 관리 프로그램

💡 프로젝트 목표 ?

  • 객체지향 설계 및 구현 연습
  • Enum의 사용
  • 다형성 활용
  • JUnit을 통한 단위 테스트 & 테스트 코드 작성
  • 코드리뷰 스터디를 통한 피드백 & 코드 개선

🚘 승용차, 버스, 트럭 3종류가 있음.

  • 승용차: 일반 차량 , 전기차(충전 가능)

💰 주차 요금

  • 승용차: 최초 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 임
  • 전기차는 완충될 때 까지 충전한다고 가정함

📃 입출력 방식

출력 캡쳐1

출력 캡쳐2

출력 캡쳐3





🙏 코드리뷰 (수정한것)

  • 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(빌더)패턴 등을 이용하여 강제성을 주는것도 좋을듯
      • 생성자에 파라미터가 많아질수록, 혼돈할 염려가 있기 때문
  • BusPrice 클래스

    • 아래와 같이 타입을 강제하는것이 좋을듯 함
      • Bus가 아닌 다른 객체(Truck, Car) 클래스에서 잘못 사용할 염려가 있음
      • Truck이 Bus 요금으로 정산해버리는 일이 발생할 수 있음
    BusPrice<? extends Bus>
  • Enum Type

    • Enum의 생성자에 Description을 주면 의미가 더욱 명확해질듯 함
    LARGE_BUS(5000, 3000) -> LARGE_BUS(5000, 3000, "대형 버스")

Releases

No releases published

Packages

No packages published

Languages