
이 글은 2026년 04월 09일 작성된 글입니다.
오늘은 콘솔 기반 명언 관리 앱을 구현하면서 CRUD 구조와 문자열 파싱, 객체 관리 방식을 정리했다.
사용자의 명령어 입력에 따라 기능을 분기하는 메인 루프이다.
void run () {
System.out.println("== 명언 앱 ==");
while (true) {
System.out.print("명령) ");
String cmd = scanner.nextLine().trim();
if (cmd.equals("종료")) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (cmd.equals("등록")) {
actionWrite();
} else if (cmd.equals("목록")) {
actionList();
} else if (cmd.startsWith("삭제")) {
actionDelete(cmd);
} else if (cmd.startsWith("수정")) {
actionModify(cmd);
}
}
scanner.close();
}
핵심
while(true)로 계속 실행앱 실행 동안 유지되는 데이터 저장 영역이다.
Scanner scanner = new Scanner(System.in);
int lastId = 0;
List<WiseSaying> wiseSayingList = new ArrayList<>();
핵심
lastId : 명언 번호 증가 관리List : 데이터 저장소 역할사용자 입력을 받아 객체를 생성하고 리스트에 저장한다.
void actionWrite() {
System.out.print("명언: ");
String content = scanner.nextLine().trim();
System.out.print("작가: ");
String author = scanner.nextLine().trim();
WiseSaying wiseSaying = write(author, content);
System.out.println("%d번 명언이 등록되었습니다.".formatted(wiseSaying.getId()));
}
WiseSaying write (String author, String content) {
WiseSaying wiseSaying = new WiseSaying(++lastId, author, content );
wiseSayingList.add(wiseSaying);
return wiseSaying;
}
핵심
++lastId로 ID 증가명언 등록 시마다 번호를 증가시켜 고유값을 유지한다.
new WiseSaying(++lastId, author, content);
핵심
등록된 명언을 최신순으로 출력한다.
void actionList() {
System.out.println("번호 / 작가 / 명언");
System.out.println("----------------------");
for (int i = wiseSayingList.size() - 1; i >=0; i--) {
WiseSaying wiseSaying = wiseSayingList.get(i);
System.out.println("%d / %s / %s".formatted(
wiseSaying.getId(),
wiseSaying.getAuthor(),
wiseSaying.getContent()
));
}
}
핵심
명령어에서 id를 추출하여 해당 데이터를 제거한다.
void actionDelete(String cmd) {
String[] cmdBits = cmd.split("=");
if (cmdBits.length < 2 || cmdBits[1].isEmpty()) {
System.out.println("id를 입력해주세요.");
return;
}
int id = Integer.parseInt(cmdBits[1]);
delete(id);
System.out.println("%d번 명언이 삭제되었습니다.".formatted(id));
}
void delete(int id) {
WiseSaying wiseSaying = null;
for (int i = 0; i < wiseSayingList.size(); i++) {
if (wiseSayingList.get(i).getId() == id) {
wiseSaying = wiseSayingList.get(i);
}
}
if (wiseSaying == null) {
System.out.println("해당 아이디는 존재하지 않습니다.");
return;
}
wiseSayingList.remove(wiseSaying);
}
핵심
split("=")로 id 추출명령어에서 필요한 값을 분리하는 과정이다.
String[] cmdBits = cmd.split("=");
int id = Integer.parseInt(cmdBits[1]);
핵심
split)parseInt)기존 데이터를 조회한 뒤 새로운 값으로 변경한다.
void actionModify(String cmd) {
String[] cmdBits = cmd.split("=");
if (cmdBits.length < 2 || cmdBits[1].isEmpty()) {
System.out.println("id를 입력해주세요.");
return;
}
int id = Integer.parseInt(cmdBits[1]);
WiseSaying wiseSaying = findById(id);
System.out.printf("명언(기존) : %s\n", wiseSaying.getContent());
System.out.print("명언 : ");
String content = scanner.nextLine().trim();
System.out.printf("작가(기존) : %s\n", wiseSaying.getAuthor());
System.out.print("작가 : ");
String author = scanner.nextLine().trim();
modify(wiseSaying, content, author);
System.out.println("%d번 명언이 수정 되었습니다.".formatted(id));
}
void modify(WiseSaying wiseSaying, String content, String author) {
wiseSaying.setContent(content);
wiseSaying.setAuthor(author);
}
핵심
id를 기준으로 명언을 조회한다.
WiseSaying findById(int id) {
WiseSaying wiseSaying = null;
for (int i = 0; i < wiseSayingList.size(); i ++) {
if (wiseSayingList.get(i).getId() == id) {
wiseSaying = wiseSayingList.get(i);
}
}
if (wiseSaying == null) {
System.out.println("해당 아이디는 존재하지 않습니다.");
return null;
}
return wiseSaying;
}
핵심