포스트

Day18 실습프로젝트(게시판CRUD)

1. 게시판 CRUD만들기

1.1 데이터 타입 정의

  • 게시판에서 사용하는 데이터타입 : [제목, 내용, 작성날짜, 조회수]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    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를 통해 받아온다.
  • 날짜는 당일 날짜를 받아온다.
1
2
3
4
5
6
7
  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의 메서드를 통해 생성
  • 리스트 출력문은 [번호, 제목, 작성날짜, 조회수]를 출력한다.
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
9
10
11
12
13
  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의 메서드를 통해 생성
  • 글 변경은 제목과 내용을 변경하고 조회수를 하나 증가 시킨다.
1
2
3
4
5
6
7
8
9
10
11
  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 글 삭제 메서드 만들기

1
2
3
4
5
6
7
8
9
10
11
12
  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. 완성된 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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("삭제하였습니다.");
  }

}


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.