[Java] 자바 프로젝트 - 기숙사 세탁기 예약

이연수·2025년 11월 27일

Projects

목록 보기
1/1

학교 자바 수업 수행평가로 제작하게 된 프로젝트 입니다.

프로젝트 제작 동기

1. 기숙사 생활 중 세탁기 이용 혼잡과 예약 혼잡이 잦음
2. 기숙사생들이 실시간으로 세탁기 상태를 확인, 예약, 취소가 불가능함

➡️ 사용자들이 실시간으로 세탁기 상태를 확인, 예약, 취소를 가능하게 하고, GUI와 콘솔을 모두 사용하여 사용자의 편의성과 관리 효율을 높이자!

클래스 구조 설계
상속/오버라이딩
JDBC로 SQLite 연동
Swing으로 버튼 UI 만들기

4개를 사용하여 프로젝트 제작을 하기로 결정

전체 구조

WashingMachine          - 기본 세탁기 클래스
PremiumWashingMachine   - 상속으로 기능 확장
WasherSystem            - 세탁기 전체 관리(예약/취소)
DatabaseManager         - SQLite DB 관리
WasherGUI               - Swing GUI
Main                    - 콘솔 버전 실행

WasherMachine/PremiumWashingMachine 설계

포인트
- WashingMachine은 예약/취소 상태를 관리
- PremiumWashingMachine은 상속받아서 getStatus()만 오버라이딩해서 ‘건조 기능 포함’을 표시
- 기본 기능은 WashingMachine
- PremiumWashingMachine은 건조 기능 추가 (오버라이딩으로 출력 다르게)
✔ reserve() — 예약 정보 저장  
✔ release() — 예약 취소  
✔ getStatus() — 상태 문자열 리턴  
➡️ PremiumWashingMachine은 getStatus()만 오버라이드 해서 '건조 기능 포함' 붙여줌

WasherSystem 설계

포인트
- 세탁기들을 한 번에 관리하는 컨트롤러
- 전체 로직 관리
- 루프 돌면서 n개의 세탁기 생성
- 프리미엄 세탁기로 만드는 if문

핵심 :

  • 배열 관리
  • 예약 가능 여부 체크
  • DB 호출

DatabaseManager 설계

포인트
- SQLite 드라이버 사용
- CREATE TABLE IF NOT EXISTS
- 예약 INSERT / DELETE - SQLite 파일(washer.db)을 사용해서 예약 정보 영구 저장
→ 프로그램 시작 시 CREATE TABLE IF NOT EXISTS로 자동 생성
→ addReservation() / deleteReservation()
✔ SQLite 연결 (JDBC)
✔ reservations 테이블 자동 생성
✔ addReservation() / deleteReservation()
➡️ GUI·콘솔 어디에서 접근하든 DB에 동일하게 기록됨

GUI 설계

포인트
- JButton 배열로 세탁기 개수만큼 UI 동적 생성
- 클릭하면 예약/취소 진행
- updateButtons()로 색상·텍스트 갱신

실행화면

전체 느낀 점

- 설계의 중요성을 실제 경험으로 체감
- 콘솔과 GUI를 동시에 관리하며 객체 공유를 배움
- DB 연동을 통해 데이터 저장과 불러오기를 경험
- 기능 추가와 UI 개선 시 구조의 중요성을 깨달음
- 한 세탁기에 여러 예약 불가 → 확장 필요성 인식
- GUI 경험 부족으로 화면 구성에 아쉬움

추후 추가하고 싶은 것

1. 현재 구조는 세탁기 당 예약을 하나만 저장해서,
서로 다른 시간대라도 한 사람이 예약하면 다른 사람이 예약 불가.

추가하고 싶은 내용 :
→ 세탁기가 여러 개의 예약을 리스트 형태로 보관하도록 확장
→ DB에서도 개별 예약을 ID 단위로 저장·취소하도록 구조를 바꿔 여러 예약을 정상적으로 처리할 수 있도록
→ 시간대가 겹치는지 검증하는 로직도 함께 추가

2. GUI를 배운 적이 많지 않아서, 현재 화면이 기능에 비해 너무 단조롭고 정보 표시가 부족,
예약 목록이나 시간대별 상태 같은 걸 직관적으로 보여주기엔 화면 구성이 아쉬움.

추가하고 싶은 내용 :
→ GUI를 조금 더 발전
→ 세탁기별 예약 목록 확인
→ 개별 예약 취소 선택
→ 시간표 형태의 시각적 표시

0개의 댓글