React로 메모장 기능을 다시 구현한 뒤, 다음 단계로 Java 콘솔 메모장을 시작했다.
지금까지는 브라우저 안에서 메모장을 만들었다.
JavaScript
→ 브라우저 안에서 배열로 메모 관리
React
→ state로 메모 배열 관리
이번에는 같은 메모장 기능을 Java 코드로 다시 구현해보려고 한다.
목표는 웹 화면을 만드는 것이 아니라, Java에서 메모 데이터를 어떻게 다룰 수 있는지 연습하는 것이다.
왜 Java 콘솔부터 시작했나
바로 Servlet/JSP나 Spring으로 넘어가면 한 번에 봐야 할 개념이 너무 많아진다.
HTTP 요청
Servlet
JSP
Tomcat
DB
Controller
Service
DAO
그래서 먼저 콘솔 환경에서 Java 문법과 CRUD 흐름을 잡아보기로 했다.
콘솔 메모장은 화면은 단순하지만, 나중에 서버로 넘어가기 전 기본 로직을 연습하기에 좋다.
이번에 먼저 만들고 싶은 흐름은 다음과 같다.
메뉴 출력
→ 사용자 입력
→ 선택한 기능 실행
→ 다시 메뉴 출력
→ 종료 선택 시 프로그램 종료
이 흐름은 나중에 웹으로 넘어가도 비슷하게 이어질 수 있다.
브라우저 요청
→ Controller 또는 Servlet
→ Service
→ 결과 응답
그래서 이번 단계에서는 기능을 바로 완성하기보다, Java 콘솔 프로그램의 기본 뼈대를 먼저 만들었다.
프로젝트 구조
Java 콘솔 메모장은 React 프로젝트와 분리해서 새 폴더로 만들었다.
Memo Evolution/
├─ react-memo/
└─ java-console-memo/
└─ src/
└─ Main.java
Main.java는 Java 프로그램의 시작점이다.
Java에서는 main 메서드가 프로그램 실행의 출발점이 된다.
public static void main(String[] args) {
}
이번 단계에서는 이 Main.java 안에서 메뉴 출력과 입력 처리를 먼저 작성했다.
처음 작성한 Main.java
처음부터 메모 작성, 수정, 삭제 기능을 모두 만들지는 않았다.
먼저 사용자가 메뉴를 선택할 수 있는 구조부터 만들었다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean running = true;
while (running) {
System.out.println("===== 메모장 =====");
System.out.println("1. 메모 작성");
System.out.println("2. 메모 목록 보기");
System.out.println("3. 메모 수정");
System.out.println("4. 메모 삭제");
System.out.println("0. 종료");
System.out.print("메뉴 선택: ");
int menu = scanner.nextInt();
if (menu == 1) {
System.out.println("메모 작성 기능은 아직 구현되지 않았습니다.");
} else if (menu == 2) {
System.out.println("메모 목록 보기 기능은 아직 구현되지 않았습니다.");
} else if (menu == 3) {
System.out.println("메모 수정 기능은 아직 구현되지 않았습니다.");
} else if (menu == 4) {
System.out.println("메모 삭제 기능은 아직 구현되지 않았습니다.");
} else if (menu == 0) {
running = false;
System.out.println("프로그램을 종료합니다.");
} else {
System.out.println("올바른 메뉴 번호를 입력하세요.");
}
System.out.println();
}
scanner.close();
}
}
아직 실제 메모 데이터는 없다.
현재는 사용자가 메뉴를 선택하면 해당 기능이 아직 구현되지 않았다는 문구만 출력된다.
입력을 받기 위해 Scanner 사용
콘솔에서 사용자의 입력을 받기 위해 Scanner를 사용했다.
Scanner scanner = new Scanner(System.in);
여기서는 사용자가 메뉴 번호를 입력하면 그 값을 읽는다.
int menu = scanner.nextInt();
예를 들어 사용자가 1을 입력하면 menu 변수에는 1이 들어간다.
사용자 입력: 1
menu = 1
이 값을 기준으로 어떤 기능을 실행할지 나누었다.
while문으로 메뉴 반복하기
메모장 프로그램은 메뉴를 한 번 보여주고 끝나면 안 된다.
사용자가 종료를 선택할 때까지 계속 메뉴가 나와야 한다.
그래서 while문을 사용했다.
boolean running = true;
while (running) {
...
}
처음에는 running 값이 true이기 때문에 반복문이 계속 실행된다.
사용자가 0을 입력하면 running을 false로 바꾼다.
running = false;
그러면 while (running) 조건이 더 이상 참이 아니게 되고, 프로그램이 종료된다.
메뉴 번호에 따라 기능 나누기
사용자가 입력한 번호에 따라 다른 동작을 해야 하므로 if / else if / else를 사용했다.
if (menu == 1) {
System.out.println("메모 작성 기능은 아직 구현되지 않았습니다.");
} else if (menu == 2) {
System.out.println("메모 목록 보기 기능은 아직 구현되지 않았습니다.");
}
아직 실제 기능은 구현하지 않았기 때문에, 지금은 각 메뉴마다 안내 문구만 출력했다.
이번 단계의 목표는 메모 기능 자체가 아니라 프로그램의 흐름을 만드는 것이다.
0을 입력하면 종료
사용자가 0을 입력하면 프로그램이 종료되도록 했다.
} else if (menu == 0) {
running = false;
System.out.println("프로그램을 종료합니다.");
}
running이 false가 되면 반복문이 끝난다.
즉, 현재 프로그램은 사용자가 직접 종료를 선택하기 전까지 계속 메뉴를 보여준다.
잘못된 번호 처리
사용자가 1, 2, 3, 4, 0이 아닌 숫자를 입력할 수도 있다.
그 경우에는 안내 문구를 출력하도록 했다.
} else {
System.out.println("올바른 메뉴 번호를 입력하세요.");
}
아직 복잡한 예외 처리는 하지 않았지만, 최소한 잘못된 번호를 입력했을 때 프로그램 흐름이 이상해지지 않도록 했다.
메모 작성
메모 목록 저장
메모 수정
메모 삭제
파일 저장
DB 저장
이번 단계는 기능 구현보다 Java 콘솔 프로그램의 기본 흐름을 만드는 데 집중했다.
'Project > Memo Evolution' 카테고리의 다른 글
| #19 Java 콘솔 메모장: CRUD기능 구현하기 (0) | 2026.06.20 |
|---|---|
| #18 Java 콘솔 메모장 시작 중 만난 IntelliJ 설정 문제 (0) | 2026.06.20 |
| #16 HTML/CSS/JS 메모장을 React로 고도화 정리 (0) | 2026.06.20 |
| #15 컴포넌트 분리와 props 이해하기 (0) | 2026.06.20 |
| #14 React에서 localStorage로 메모 저장하기 (0) | 2026.06.19 |