Java 응용 | 간단한 CRUD 만들기

Dalyume·2026년 7월 24일

Java 응용

목록 보기
5/15
post-thumbnail

이번엔 간단한 CRUD를 만들어보겠습니다.

어제했던 콘솔게임(?) 보다는 간단합니다.

먼저 메인메뉴를 선택할 수 있는 목록을 main함수에서 조회합니다.

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int input = 0;
        String[] menus = {
                "1. 등록",
                "2. 조회",
                "3. 수정",
                "4. 삭제",
                "0. 종료"
        };
        List<String> postList = new ArrayList<>();
        postList.add("hello");
        postList.add("yume in muse dash!");

        while (true) {
            System.out.println("원하시는 기능을 선택해주세요.");
            for (int i = 0; i < menus.length; i++) {
                System.out.println(menus[i]);
            }
            System.out.print("입력 : ");
            input = scan.nextInt();

            if (input < 0 || input > menus.length) {
                System.out.println("없는 기능입니다. 다시 시도해주세요.");
                continue;
            }

            if (input == 0) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
                menus(input, scan, postList); //선택 완료 후 menus 메서드로 이동
            }
        }

메뉴에서 선택이 완료되면 menus로 이동합니다.

public static void menus(intinput, Scanner scan, List<String> postList) {
    if(input == 1) {
        createPost(scan, postList);
    } else if(input == 2) {
        System.out.println("포스트 목록을 불러옵니다.");
        readAllPosts(scan, postList);
    } else if(input == 3) {
        updatePost(scan, postList);
    } else{
        deletePost(scan, postList);
    }
}

menus 메서드는 각 선택한 메뉴에 따라 맞는 메서드들로 이동시키는 필터링 역할을 합니다.

기능들을 보기 전에, 각 코드에서 반복되는 공통 작업들이 있습니다. 바로 확인메세지이죠.

public static boolean checkMessage(Scanner scan) {
    String check;
    while(true) {
        System.out.print("해당 작업을 수행하시겠습니까? (Y/N) : ");
        check = scan.next();
        if(check.equalsIgnoreCase("Y")) {
            return true;
        } else if(check.equalsIgnoreCase("N")) {
            return false;
        } else{
            System.out.println("Y또는 N이 아닙니다 다시 시도해주세요.");
        }
    }

}

해당 행동을 할 것인지 2차로 확인하는 것이며, y면 true, n이면 false를 반환해 작업 수행여부를 판단시킵니다.

생성

public static void createPost(Scanner scan, List<String> postList) {
    String content;
    String check;
    while(true) {
        System.out.println("포스트를 추가합니다.추가할 내용을 입력 해주세요.");
        System.out.print("입력 : ");
        scan.nextLine(); //버퍼 엔터 제거 중요함.content = scan.nextLine();

        if(checkMessage(scan)) { // 확인메세지 메서드 사용
            System.out.println("포스트를 추가합니다.");
            postList.add(content);
            break;
        } else{
            System.out.println("메뉴로 돌아갑니다.");
        }

    }
}

내용을 생성해, 리스트에 담습니다.

조회

public static void readAllPosts(Scanner scan, List<String> postList) {
    System.out.println("현재 포스트는 총 "+ postList.size() + "개 입니다.");
    for(inti = 0; i < postList.size(); i++) {
        System.out.println((i + 1) + ". "+ postList.get(i));
    }
    System.out.println();
}

리스트에 들어있는 포스트들을 조회합니다. 이는 수정, 삭제 목록에도 띄우는 공공역할도 맡습니다.

수정

public static void updatePost(Scanner scan, List<String> postList) {
    intchoose = 0;
    String check;
    String content;
    System.out.println("업데이트할 포스트를 골라주세요.");
    readAllPosts(scan, postList); // 전체조회 메서드 사용
    System.out.print("선택 : ");
    choose = scan.nextInt();
    choose -= 1;

    if(choose <= postList.size() && choose >= 0) {
        postList.get(choose);

        if(checkMessage(scan)) {
            System.out.println("수정을 시작합니다.새로운 내용을 적어주세요.");
            System.out.print("본문 : ");
            scan.nextLine();
            content = scan.nextLine();

            postList.set(choose, content);
            System.out.println("수정이 완료되었습니다.");
        }

        System.out.println("메뉴로 돌아갑니다.");

    } else{
        System.out.println("해당 포스트를 찾을 수 없습니다.");
    }
}

리스트 목록에서 고른 포스트를 수정합니다.

삭제

public static void deletePost(Scanner scan, List<String> postList) {
    intchoose = 0;
    String check;
    System.out.println("삭제할 포스트를 선택 해주세요.");
    readAllPosts(scan, postList);
    System.out.print("선택 : ");
    choose = scan.nextInt() - 1;

    if(checkMessage(scan)) {
        postList.remove(choose);
        System.out.println("포스트를 삭제하였습니다.");
    }

    System.out.println("메뉴로 돌아갑니다.");
}

리스트 목록에서 고른 포스트를 삭제합니다.


수정사항(26.7.24 14:55)

  1. postList → nameList로 변경

목표를 포스트 기록 → 이름 기록으로 변경

  1. 목록이 비어있을 때 수정, 조회, 삭제가 불가능 하도록 변경
public static boolean getOrDefault(List<String> nameList) {
        if (nameList.isEmpty()) {
            System.out.println("이름 목록이 비어있습니다.");
            return true;
        } else {
            return false;
        }
    }
  1. 불 필요한 변수 제거
  • 조회할 때 scan이 불필요한데 들어가 있었음.

전체코드

package ch06;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Ex3 {

    public static boolean checkMessage(Scanner scan) {
        String check;
        while (true) {
            System.out.print("해당 작업을 수행하시겠습니까? (Y/N) : ");
            check = scan.next();
            if (check.equalsIgnoreCase("Y")) {
                return true;
            } else if (check.equalsIgnoreCase("N")) {
                return false;
            } else {
                System.out.println("Y 또는 N이 아닙니다 다시 시도해주세요.");
            }
        }

    }

    public static boolean getOrDefault(List<String> nameList) {
        if (nameList.isEmpty()) {
            System.out.println("이름 목록이 비어있습니다.");
            return true;
        } else {
            return false;
        }
    }

    public static void createName(Scanner scan, List<String> nameList) {
        String name;
        String check;
        while (true) {
            System.out.println("이름을 추가합니다. 추가할 내용을 입력 해주세요.");
            System.out.print("입력 : ");
            scan.nextLine(); // 버퍼 엔터 제거 중요함.
            name = scan.nextLine();

            for (int i = 0; i < nameList.size(); i++) {
                if (name.equalsIgnoreCase(nameList.get(i))) {
                    System.out.println("중복 이름은 사용할 수 없습니다!");
                    return;
                }
            }

            if (checkMessage(scan)) {
                System.out.println("이름을 추가합니다.");
                nameList.add(name);
                break;
            } else {
                System.out.println("메뉴로 돌아갑니다.");
            }

        }
    }

    public static void readAllNames(List<String> nameList) {

        if (getOrDefault(nameList)) {
            return;
        }

        System.out.println("현재 이름은 총 " + nameList.size() + "개 입니다.");
        for (int i = 0; i < nameList.size(); i++) {
            System.out.println((i + 1) + ". " + nameList.get(i));
        }
        System.out.println();
    }

    public static void updateName(Scanner scan, List<String> nameList) {
        int choose = 0;
        String name;

        if (getOrDefault(nameList)) {
            return;
        }

        System.out.println("업데이트할 이름을 골라주세요.");
        readAllNames(nameList);
        System.out.print("선택 : ");
        choose = scan.nextInt();
        choose -= 1;

        if (choose <= nameList.size() && choose >= 0) {

            if (checkMessage(scan)) {
                System.out.println("수정을 시작합니다. 새로운 내용을 적어주세요.");
                System.out.print("본문 : ");
                scan.nextLine();
                name = scan.nextLine();

                nameList.set(choose, name);
                System.out.println("수정이 완료되었습니다.");
            }

            System.out.println("메뉴로 돌아갑니다.");

        } else {
            System.out.println("해당 이름를 찾을 수 없습니다.");
        }
    }

    public static void deleteName(Scanner scan, List<String> nameList) {
        int choose = 0;
        String check;

        if (getOrDefault(nameList)) {
            return;
        }

        System.out.println("삭제할 이름을 선택 해주세요.");
        readAllNames(nameList);
        System.out.print("선택 : ");
        choose = scan.nextInt() - 1;

        if (checkMessage(scan)) {
            nameList.remove(choose);
            System.out.println("이름을 삭제하였습니다.");
        }

        System.out.println("메뉴로 돌아갑니다.");
    }

    public static void menus(int input, Scanner scan, List<String> nameList) {
        if (input == 1) {
            createName(scan, nameList);
        } else if (input == 2) {
            System.out.println("이름 목록을 불러옵니다.");
            readAllNames(nameList);
        } else if (input == 3) {
            updateName(scan, nameList);
        } else {
            deleteName(scan, nameList);
        }
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int input = 0;
        String[] menus = {
                "1. 등록",
                "2. 조회",
                "3. 수정",
                "4. 삭제",
                "0. 종료"
        };
        List<String> nameList = new ArrayList<>();

        while (true) {
            System.out.println("원하시는 기능을 선택해주세요.");
            for (int i = 0; i < menus.length; i++) {
                System.out.println(menus[i]);
            }
            System.out.print("입력 : ");
            input = scan.nextInt();

            if (input < 0 || input > menus.length) {
                System.out.println("없는 기능입니다. 다시 시도해주세요.");
                continue;
            }

            if (input == 0) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
                menus(input, scan, nameList);
            }
        }

    }
}
profile
신생아 개발자

0개의 댓글