본문 바로가기
개발자 꿈나무의 하루/01_Boot Camp

(네이버클라우드 부트캠프) 18일차 - 실습프로젝트(게시판CRUD)

by kk_naks 2024. 6. 19.

1. 게시판 CRUD만들기 

  1.1 데이터 타입 정의

- 게시판에서 사용하는 데이터타입 : [제목, 내용, 작성날짜, 조회수]
package bitcamp.myapp2.vo;

import java.util.Date;

public class Board {
  private String title;
  private String content;
  private Date createdDate;
  private int viewCount;

  public String getTitle() {
    return title;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  public Date getCreatedDate() {
    return createdDate;
  }

  public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
  }

  public int getViewCount() {
    return viewCount;
  }

  public void setViewCount(int viewCount) {
    this.viewCount = viewCount;
  }
}

  1.2 기본 프레임 생성

- 기본 프레임은 기존 유저,프로젝트와 유사하다.

     - 기본 구조

package bitcamp.myapp2.command;

import bitcamp.myapp2.util.Prompt;
import bitcamp.myapp2.vo.User;

public class BoardCommand {
  private static final int MAX_SIZE = 10;
  private static final Board[] boards = new Board[MAX_SIZE];
  private static int boardLength = 0;

  public static void excuteBoardCommand(String command) {
    System.out.printf("[%s]\n", command);
    switch (command) {
      case "등록":
        addBoard();
        break;
      case "목록":
        listBoard();
        break;
      case "조회":
        viewBoard();
        break;
      case "변경":
        updateBoard();
        break;
      case "삭제":
        deleteBoard();
        break;
    }
  }

  private static void addBoard() {
  }

  private static void listBoard() {
  }

  private static void viewBoard() {
  }

  private static void updateBoard() {
  }

  private static void deleteBoard() {

  }

}

   

  1.3 글 등록 메서드 만들기

- 글 등록의 메서드는 addBoard의 메서드를 통해 생성
- 제목과 내용을 Prompt를 통해 받아온다.
- 날짜는 당일 날짜를 받아온다. 
  private static void addBoard() {
    Board board = new Board();
    board.setTitle(Prompt.input("제목?"));
    board.setContent(Prompt.input("내용?"));
    board.setCreatedDate(new Date());
    boards[boardLength++] = board;
  }

 

  1.4 글 목록 메서드 만들기

- 글 목록 메서드는 listBoard의 메서드를 통해 생성
- 리스트 출력문은 [번호, 제목, 작성날짜, 조회수]를 출력한다.
private static void listBoard() {
    System.out.println("번호 제목 작성일 조회수");
    for (int i = 0; i < boardLength; i++) {
      Board board = boards[i];
      System.out.printf("%d %s %tY-%3$tm-%3$td %d", (i + 1), board.getTitle(),
          board.getCreatedDate(), board.getViewCount());
    }
  }

 

  1.5 글 조회 메서드 만들기

- 글 조회 메서드는 viewBoard의 메서드를 통해 생성
- 조회에는 게시글 번호를 입력 받아 보드배열에서 해당 게시글의 [제목, 내용,작성시간, 조회수]를 출력
- 조회하는 순간 조회수는 +1
  private static void viewBoard() {
    int boardNo = Prompt.inputInt("게시글 번호?");
    if (boardNo < 1 || boardNo >= boardLength) {
      System.out.println("없는 게시글입니다.");
      return;
    }
    Board board = boards[boardNo - 1];
    board.setViewCount(board.getViewCount() + 1);
    System.out.printf("제목: %s", board.getTitle());
    System.out.printf("내용: %s", board.getContent());
    System.out.printf("작성시간: %tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS", board.getCreatedDate());
    System.out.printf("조회수: %d", board.getViewCount());
  }

 

  1.6 글 변경 메서드 만들기

- 글 변경 메서드는 updateBoard의 메서드를 통해 생성
- 글 변경은 제목과 내용을 변경하고 조회수를 하나 증가 시킨다.
  private static void updateBoard() {
    int boardNo = Prompt.inputInt("게시글 번호?");
    if (boardNo < 1 || boardNo > boardLength) {
      System.out.println("없는 게시글입니다.");
      return;
    }
    Board board = boards[boardNo - 1];
    board.setViewCount(board.getViewCount() + 1);
    board.setTitle(Prompt.input("제목(%s)?", board.getTitle()));
    board.setContent(Prompt.input("내용(%s", board.getContent()));
  }

 

  1.7 글 삭제 메서드 만들기

  private static void deleteBoard() {
    int boardNo = Prompt.inputInt("게시글 번호?");
    if (boardNo < 1 || boardNo > boardLength) {
      System.out.println("없는 게시글입니다.");
      return;
    }
    for (int i = boardNo; i < boardLength; i++) {
      boards[i - 1] = boards[i];
    }
    boards[--boardLength] = null;
    System.out.println("삭제하였습니다.");
  }

 

3. 완성된 코드

package bitcamp.myapp2.command;

import bitcamp.myapp2.util.Prompt;
import bitcamp.myapp2.vo.Board;

import java.util.Date;

public class BoardCommand {
  private static final int MAX_SIZE = 10;
  private static final Board[] boards = new Board[MAX_SIZE];
  private static int boardLength = 0;

  public static void excuteBoardCommand(String command) {
    System.out.printf("[%s]\n", command);
    switch (command) {
      case "등록":
        addBoard();
        break;
      case "목록":
        listBoard();
        break;
      case "조회":
        viewBoard();
        break;
      case "변경":
        updateBoard();
        break;
      case "삭제":
        deleteBoard();
        break;
    }
  }

  private static void addBoard() {
    Board board = new Board();
    board.setTitle(Prompt.input("제목?"));
    board.setContent(Prompt.input("내용?"));
    board.setCreatedDate(new Date());
    boards[boardLength++] = board;
  }

  private static void listBoard() {
    System.out.println("번호 제목 작성일 조회수");
    for (int i = 0; i < boardLength; i++) {
      Board board = boards[i];
      System.out.printf("%d %s %tY-%3$tm-%3$td %d", (i + 1), board.getTitle(),
          board.getCreatedDate(), board.getViewCount());
    }
  }

  private static void viewBoard() {
    int boardNo = Prompt.inputInt("게시글 번호?");
    if (boardNo < 1 || boardNo > boardLength) {
      System.out.println("없는 게시글입니다.");
      return;
    }
    Board board = boards[boardNo - 1];
    board.setViewCount(board.getViewCount() + 1);
    System.out.printf("제목: %s", board.getTitle());
    System.out.printf("내용: %s", board.getContent());
    System.out.printf("작성시간: %tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS", board.getCreatedDate());
    System.out.printf("조회수: %d", board.getViewCount());
  }

  private static void updateBoard() {
    int boardNo = Prompt.inputInt("게시글 번호?");
    if (boardNo < 1 || boardNo > boardLength) {
      System.out.println("없는 게시글입니다.");
      return;
    }
    Board board = boards[boardNo - 1];
    board.setViewCount(board.getViewCount() + 1);
    board.setTitle(Prompt.input("제목(%s)?", board.getTitle()));
    board.setContent(Prompt.input("내용(%s", board.getContent()));
    System.out.println("변경하였습니다.");
  }

  private static void deleteBoard() {
    int boardNo = Prompt.inputInt("게시글 번호?");
    if (boardNo < 1 || boardNo > boardLength) {
      System.out.println("없는 게시글입니다.");
      return;
    }
    for (int i = boardNo; i < boardLength; i++) {
      boards[i - 1] = boards[i];
    }
    boards[--boardLength] = null;
    System.out.println("삭제하였습니다.");
  }

}