Day 28 - Java CRUD

haxxru log;·2026년 4월 9일
post-thumbnail

이 글은 2026년 04월 09일 작성된 글입니다.

오늘은 콘솔 기반 명언 관리 앱을 구현하면서 CRUD 구조와 문자열 파싱, 객체 관리 방식을 정리했다.


1. 전체 실행 흐름 (run)

사용자의 명령어 입력에 따라 기능을 분기하는 메인 루프이다.

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)로 계속 실행
  • 명령어에 따라 기능 분기
  • 콘솔 앱의 전체 흐름 제어

2. 상태 관리 (필드)

앱 실행 동안 유지되는 데이터 저장 영역이다.

Scanner scanner = new Scanner(System.in);
int lastId = 0;
List<WiseSaying> wiseSayingList = new ArrayList<>();

핵심

  • lastId : 명언 번호 증가 관리
  • List : 데이터 저장소 역할
  • 메모리 기반 구조

3. 명언 등록 (Create)

사용자 입력을 받아 객체를 생성하고 리스트에 저장한다.

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 증가
  • 입력과 저장 로직 분리

4. ID 증가 방식

명언 등록 시마다 번호를 증가시켜 고유값을 유지한다.

new WiseSaying(++lastId, author, content);

핵심

  • 선증가 연산 사용
  • 삭제해도 ID 재사용 없음

5. 목록 조회 (Read)

등록된 명언을 최신순으로 출력한다.

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()
        ));
    }
}

핵심

  • 리스트 역순 순회
  • 최신 데이터가 위로 출력

6. 삭제 (Delete)

명령어에서 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 추출
  • 리스트 탐색 후 제거
  • 존재 여부 확인

7. 문자열 파싱

명령어에서 필요한 값을 분리하는 과정이다.

String[] cmdBits = cmd.split("=");
int id = Integer.parseInt(cmdBits[1]);

핵심

  • 문자열 분리 (split)
  • 숫자 변환 (parseInt)

8. 수정 (Update)

기존 데이터를 조회한 뒤 새로운 값으로 변경한다.

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);
}

핵심

  • 기존 객체 조회 후 값 변경
  • 객체 참조 기반 수정

9. findById

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;
}

핵심

  • 리스트 순회로 데이터 조회
  • 없으면 null 반환

✅ 정리

  • List를 활용하여 명언 데이터를 메모리에 저장하고 관리할 수 있다.
  • lastId를 증가시키는 방식으로 고유한 ID를 유지할 수 있다.
  • split과 parseInt를 사용하여 문자열 명령어를 처리할 수 있다.
  • CRUD 구조를 통해 등록, 조회, 삭제, 수정 기능을 구현할 수 있다.

0개의 댓글