Java로 콘솔 기반 유지보수 헬프데스크 시스템 구축
Source: Dev.to
위에 제공된 소스 링크 아래에 번역하고 싶은 전체 텍스트(마크다운 형식 포함)를 알려주시면, 코드 블록과 URL은 그대로 두고 내용만 한국어로 번역해 드리겠습니다.
Describing the Features
아래는 프로그램의 세 가지 핵심 기능입니다. 각 기능마다 코드에 대한 상세 설명을 제공하며, 실제 구현을 강의에서 다룬 이론적 개념과 연결합니다.
Maintenance Request Tracker
1 - Add a request
2 - View a request
3 - Administrator
4 - Exit
Please choose an option 1‑4:
User Input
사용자 입력은 헬프‑데스크 프로그램의 핵심이며, 모든 상호작용은 콘솔을 통해 이루어집니다. Java의 Scanner 클래스를 사용해 입력을 읽어 메뉴 옵션을 탐색하고, 유지보수 요청을 생성하며, 작업을 업데이트하거나 종료할 때 참조 번호를 입력합니다.
int choice = 0; // Stores the menu option chosen by the user.
boolean validChoice = false; // Ensures only valid input is accepted.
while (!validChoice) { // Loop until the user enters a valid number.
try {
System.out.println("Please choose an option 1‑4:");
choice = input.nextInt(); // Reads the menu choice as a number.
input.nextLine(); // Clears the scanner buffer.
validChoice = true; // Exit loop if a valid choice was entered.
} catch (Exception e) {
System.out.println("Invalid input, please choose a number between 1 and 4");
input.nextLine(); // Discard the invalid input.
}
}
핵심 포인트
nextInt()는 숫자 값만 읽고 줄바꿈 문자는 버퍼에 남깁니다.- 추가
nextLine()호출로 남은 줄바꿈을 제거하여 다음 텍스트 입력 전에 버퍼를 비웁니다. try / catch블록은 비숫자 문자가 입력될 때 프로그램이 충돌하는 것을 방지합니다.
Reference‑Number Validation
while (!validRef) {
try {
System.out.println("Please enter your request reference number:");
refNumber = input.nextInt();
input.nextLine(); // Clear buffer.
validRef = true;
} catch (Exception e) {
System.out.println("Invalid input, please enter the correct number");
input.nextLine(); // Discard the invalid input.
}
}
이와 같은 방어적 프로그래밍 방식은 애플리케이션이 견고하고 사용자 친화적으로 유지되도록 하며, 런타임 오류를 줄여줍니다. 이는 Bootcamp Lecture 3에서 다룬 Scanner를 이용한 사용자 입력 처리 개념을 직접 반영합니다.
Selection Statements
선택문은 프로그램이 사용자 입력에 어떻게 반응할지를 제어합니다. 메뉴 기반 콘솔 애플리케이션에서는 다음에 실행될 프로그램 부분을 결정합니다.
Main‑Menu Navigation
if (choice == 1) {
addRequest();
} else if (choice == 2) {
viewRequest();
} else if (choice == 3) {
adminMenu();
} else if (choice == 4) {
System.out.println("Exiting Programme");
running = false;
} else {
System.out.println("Invalid Option Chosen");
}
- If / else‑if 문은 가능한 각 경로를 명시적으로 표시하여 프로그램이 커짐에 따라 가독성과 유지보수성을 향상시킵니다.
- 이는 selection과 control flow라는 핵심 구조적 프로그래밍 개념을 보여줍니다.
Building Selection Example
String buildingName = ""; // Will hold the building name once selected.
boolean validBuilding = false; // Loop until a valid building is chosen.
while (!validBuilding) {
try {
System.out.println("Building Name (Choose 1‑5):");
System.out.println("1 - Simon");
System.out.println("2 - Beyer");
System.out.println("3 - Michael Smith");
System.out.println("4 - Stopford");
System.out.println("5 - Alan Turing");
int buildingChoice = input.nextInt(); // Stores the building option.
input.nextLine(); // Clear scanner buffer.
// Map the numeric choice to a building name.
switch (buildingChoice) {
case 1 -> buildingName = "Simon";
case 2 -> buildingName = "Beyer";
case 3 -> buildingName = "Michael Smith";
case 4 -> buildingName = "Stopford";
ford";
case 5 -> buildingName = "Alan Turing";
default -> {
System.out.println("Invalid building number, please try again.");
continue; // Prompt again.
}
}
validBuilding = true;
} catch (Exception e) {
System.out.println("Invalid input, please enter a number between 1 and 5");
input.nextLine(); // Discard the invalid input.
}
}
선택은 프로그램 전반에 걸쳐 다음과 같은 용도로 사용됩니다:
- 우선순위 수준 선택
- Y/N 동작 확인
- 다른 사용자 입력 선택 검증
결론
입력 검증, 예외 처리 및 선택문을 결합함으로써, 유지보수 헬프‑데스크 시스템은 견고하고 방어적인 프로그래밍 관행을 보여줍니다. 이러한 기술은 견습 부트캠프에서 다룬 이론 자료와 일치할 뿐만 아니라 신뢰할 수 있고 사용자‑친화적인 콘솔 애플리케이션을 만들어냅니다.
Overview
유지보수 헬프‑데스크 시스템은 Java의 ArrayList 클래스를 사용하여 데이터를 저장하고 관리합니다. ArrayList는 유지보수 요청과 기술자에 대한 데이터를 보관하며, 프로그램이 여러 객체를 저장하고 동적으로 관리할 수 있게 합니다.
private static ArrayList request = new ArrayList<>();
private static ArrayList technician = new ArrayList<>();
이론적으로 ArrayList는 Java 컬렉션 프레임워크의 일부이며 동적 데이터 구조를 나타냅니다—실행 중에 크기가 늘어나거나 줄어들 수 있습니다. 이는 사전에 데이터 양을 알 수 없을 때 고정 크기 배열보다 더 적합합니다. 우리 프로그램에서는 사용자가 지속적으로 새로운 요청과 기술자를 추가할 수 있기 때문에 동적 구조가 필수적입니다.
Request newRequest = new Request(
refNumber, requester, telephone,
buildingName, description, priority);
request.add(newRequest);
새 객체는 생성되는 즉시 이러한 리스트에 추가됩니다. 새로운 유지보수 요청이 추가될 때 Request 객체가 인스턴스화되어 request 리스트에 저장됩니다.
private static int findRequest(int refNumber) {
for (int i = 0; i = 1 && choice <= 4) {
validChoice = true;
} else {
System.out.println("Invalid option, please choose between 1 and 4");
}
}
수정: 유효한 메뉴 옵션만 허용하도록 추가 검증을 넣었습니다. 잘못된 옵션이 입력되면 오류 메시지가 표시되어 사용자가 올바른 선택을 다시 입력하도록 유도합니다. 이 개선으로 잘못된 선택을 방지하고 인터랙티브 프로그램에서 입력 검증의 중요성을 강조했습니다.
Issue 3 – Duplicate Reference Numbers
각 요청과 기술자는 나중에 검색하기 위해 고유한 참조 번호를 가져야 합니다.
// Auto‑generate reference numbers
private static int nextRequestRef = 1001;
private static int nextTechNumber = 1;
원인: 프로그램 시작 시 미리 채워진 테스트 데이터를 추가했을 때, 카운터(nextRequestRef, nextTechNumber)가 업데이트되지 않아 새로 생성된 객체가 중복된 참조 번호를 받게 되었습니다.
수정: 테스트 데이터를 삽입한 후 카운터를 업데이트하여 이후 객체가 다음 사용 가능한 고유 번호를 받도록 했습니다.
int refNumber = nextRequestRef;
nextRequestRef++;
Request newRequest = new Request(
refNumber, requester, telephone,
buildingName, description, priority);
request.add(newRequest);
이 문제를 관리하면서 자동으로 생성되는 식별자를 사용할 때 프로그램 상태를 일관되게 유지하는 것이 얼마나 중요한지 강조되었습니다.
결론
정비 헬프데스크 시스템을 개발하면서 Java 프로그래밍에 대한 이해가 깊어졌으며, 특히 다음과 같은 점에서:
- 숫자와 텍스트가 혼합된 사용자 입력을 안전하게 처리하기.
- 선택문을 사용하고 메뉴 선택을 검증하기.
ArrayList를 사용하여 동적 데이터를 관리하기.
프로그램 규모가 커짐에 따라 상태 관리(예: 고유 식별자)와 견고한 입력 검증의 중요성을 깨달았으며, 이는 신뢰할 수 있고 유지 보수가 쉬운 소프트웨어를 보장합니다.
코드 리팩토링에 대한 성찰
코드를 별도의 클래스로 분리하면서 코드를 어느 정도 정리하고 가독성을 높일 수 있었습니다. 하지만 추가로 개선할 여지가 있다고 느꼈으며, 더 많은 향상을 할 수 있었을 것이라고 생각합니다.
코드를 더 발전시킨다면, 데이터를 세션 간에 저장하고 불러올 수 있도록 읽기·쓰기 기능을 추가하고 싶습니다. 이렇게 하면 프로그램이 종료될 때 데이터가 초기화되는 것을 방지할 수 있습니다.
전반적으로 이 프로젝트를 통해 좋은 구조, 입력 검증의 중요성, 그리고 코드를 신중히 계획하고 조직해야 함을 이해하게 되었습니다.