사이먼's 코딩노트

[Java] 게시판 제작(4) 본문

프로젝트/[Java] 게시판 제작

[Java] 게시판 제작(4)

simonpark817 2024. 2. 21. 20:12

[게시판 제작 ~ing]

 

GitHub - psm817/full_stack_proj_2024_03

Contribute to psm817/full_stack_proj_2024_03 development by creating an account on GitHub.

github.com

 

[게시물 삭제 기능 구현]

  • 게시물의 상세보기 기능을 구현했다면 이번에는 "article delete 고유번호" 명령어를 통해 원하는 고유 번호의 게시물을 삭제할 수 있도록 만들어보자.
  • 아래 코드는 기존 작성된 코드 중 Main 메서드의 무한루프 안에 작성하였다.
else if(cmd.startsWith("article delete ")) {
    String[] cmdBits = cmd.split(" ");

    int id = Integer.parseInt(cmdBits[2]);

    int foundIndex = -1;

    for(int i = 0; i < articles.size(); i++) {
        Article article = articles.get(i);

        if(article.id == id) {
            foundIndex = i;
            break;
        }
    }

    if(foundIndex == -1) {
        System.out.printf("%d번 게시물은 존재하지 않습니다.\n", id);
        continue;
    }
    
    articles.remove(foundIndex);
    System.out.printf("%d번 게시물이 삭제되었습니다.\n", id);
}
  • 특정 게시물의 고유 번호를 구분하는 방법과 "article delete" 이라는 문장으로 시작했을 때 동작하는 방법은 이 전에 구현한 게시물 상세보기 기능과 동일하다.
  • 특정 배열을 삭제할 때는 index 번호를 통해 remove() 메서드를 사용한다. 그렇기 때문에 게시물의 모든 정보보다는 해당 게시물이 어떤 index에 위치하는 지를 파악해야된다.
  • 우리가 생각했을 때 상식적으로 0번째 배열은 index 1번 이라고 생각을 해서 remove() 에 들어갈 index를 (id - 1)로 지정해서는 안된다.
  • 만약 1, 2번 게시물을 작성 후, 1번 게시물을 삭제하고 3번 게시물을 작성할 때 index는 빈 공간인 1에 채워지고 고유 번호인 id는 계속 증가하기 때문에 위 같은 계산이 맞지 않게 된다.
  • 그 다음은 게시물이 있는지 없는지 확인하기 위해 foundIndex 이라는 변수를 하나 만들고 기본 세팅을 -1로 준다.
  • 만약 foundIndex가 여전히 -1이면 게시물이 존재하지 않는다는 출력문을 출력하도록 한다.
  • 게시물이 있을 때는 반복문을 통해 게시물이 담겨있는 articles의 크기만큼 반복하여 저장된 게시물을 차례대로 가져오고 게시물의 고유 번호가 사용자가 직접 입력한 번호와 일치한다면 foundIndex에 고유 번호를 저장한다.
  • 이 과정을 모두 거친 후 게시물이 존재한다면 remove() 메서드를 통해 게시물을 삭제하고 출력문을 통해 게시물이 삭제되었다고 출력한다. [articles.remove(foundIndex)]

 

[게시물 수정 기능 구현]

  • 게시물의 삭제 기능을 구현했다면 이번에는 "article modify 고유번호" 명령어를 통해 원하는 고유 번호의 게시물을 수정할 수 있도록 만들어보자.
  • 아래 코드는 기존 작성된 코드 중 Main 메서드의 무한루프 안에 작성하였다.
else if(cmd.startsWith("article modify ")) {
    String[] cmdBits = cmd.split(" ");

    int id = Integer.parseInt(cmdBits[2]);

    Article foundArticle = null;

    for(int i = 0; i < articles.size(); i++) {
        Article article = articles.get(i);

        if(article.id == id) {
            foundArticle = article;
            break;
        }
    }

    if(foundArticle == null) {
        System.out.printf("%d번 게시물은 존재하지 않습니다.\n", id);
        continue;
    }

    System.out.printf("제목 : ");
    String title = scanner.nextLine();
    System.out.printf("내용 : ");
    String body = scanner.nextLine();

    foundArticle.title = title;
    foundArticle.body = body;

    System.out.printf("%d번 게시물이 수정되었습니다.\n", id);
}
  • 특정 게시물의 고유 번호를 구분하는 방법과 "article modify" 이라는 문장으로 시작했을 때 동작하는 방법은 이 전에 구현한 게시물 상세보기, 삭제 기능과 동일하다.
  • 먼저 수정할 게시물이 있는지 없는지 확인하기 위해 foundArticle 이라는 변수를 하나 만들고 기본 세팅을 null 값을 준다.
  • 만약 foundArticle이 null 이면 게시물이 존재하지 않는다는 출력문을 출력하도록 한다.
  • 게시물이 있을 때는 반복문을 통해 게시물이 담겨있는 articles의 크기만큼 반복하여 저장된 게시물을 차례대로 가져오고 게시물의 고유 번호가 사용자가 직접 입력한 번호와 일치한다면 foundArticle에 해당 게시물 정보를 저장한다.
  • 그 다음은 제목과 내용을 수정하기 위해 "article write" 때 사용했던 nextLine()를 이용한 수정 정보를 입력받는 코드를 추가한다. [String title = scanner.nextLine()], [String body = scanner.nextLine()] 
  • 제목과 내용을 입력했다면 articles에서 get한 foundArticle 변수에 업데이트된 게시물 정보를 저장한다. [foundArticle.title=title], [foundArticle.body = body]
  • 이 과정을 모두 거친 후 게시물이 존재한다면 가장 아래에서 출력문을 통해 게시물이 수정되었다고 출력한다.

 

  • 현재까지 작성된 코드를 실행하면 다음과 같이 게시판이 동작한다.

게시판 4차 동작

 

반응형

'프로젝트 > [Java] 게시판 제작' 카테고리의 다른 글

[Java] 게시판 제작(6)  (0) 2024.02.23
[Java] 게시판 제작(5)  (0) 2024.02.22
[Java] 게시판 제작(3)  (0) 2024.02.21
[Java] 게시판 제작(2)  (0) 2024.02.21
[Java] Scanner / 게시판 제작(1)  (0) 2024.02.19