사이먼's 코딩노트

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

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

[Java] 게시판 제작(3)

simonpark817 2024. 2. 21. 17:52

[게시판 제작 ~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 detail 고유번호" 명령어를 통해 원하는 고유 번호 게시물의 상세내용을 볼 수 있도록 만들어보자.
  • 아래 코드는 기존 작성된 코드 중 Main 메서드의 무한루프 안에 작성하였다.
else if(cmd.startsWith("article detail ")) {
    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("번호 : %d\n", foundArticle.id);
    System.out.printf("제목 : %s\n", foundArticle.title);
    System.out.printf("내용 : %s\n", foundArticle.body);
}
  • "article detail" 명령어는 "article detail 1" 과 같이 끝에 게시물 번호를 작성해야 명령어가 실행된다.
  • 기존의 cmd를 특정 문자열과 비교할 때는 equals를 사용하였지만 이번에는 "article detail" 이라는 문장으로 시작됐을 때 동작해야되기 때문에 startsWith() 메서드를 사용하였다. [cmd.startsWith("article detail ")]
  • 몇 번째 게시물의 상세보기를 원하는지 구분하는 방법은 게시물의 고유 번호를 통해서다. 고유 번호를 체크하는 방법은 입력된 cmd에서 공백 " " 을 기준으로 배열 공간을 나눠 체크할 수 있다.
  • 예를 들어 "article detail 2" 라고 명령어를 치면 공백을 기준으로 총 3개의 문자열이 나눠지고 0번부터 2번까지 배열 공간에 해당 문자열을 각각 저장하고 배열의 2번째에 위치한 숫자를 찾는다.
  • 공백을 기준으로 배열을 구분하는 방법은 split() 메서드를 사용하는 것이다. [String[] cmdBits = cmd.split(" ")]
  • cmdBits[2]에 사용자가 입력한 게시물의 고유 번호가 저장되어 있고 해당 숫자를 id라는 변수를 만들어 넣어준다. 이 때 String 타입을 int 타입으로 바꿔주기 위해 Integer.parseInt() 메서드를 사용한다.
  • 그 다음은 게시물이 있는지 없는지 확인하기 위해 foundArticle 이라는 변수를 하나 만들고 기본 세팅을 null 값을 준다.
  • 만약 foundArticle이 null 이면 게시물이 존재하지 않는다는 출력문을 출력하도록 한다.
  • 게시물이 있을 때는 반복문을 통해 게시물이 담겨있는 articles의 크기만큼 반복하여 저장된 게시물을 차례대로 가져오고 게시물의 고유 번호가 사용자가 직접 입력한 번호와 일치한다면 foundArticle에 해당 게시물 정보를 저장한다.
  • 이 과정을 모두 거친 후 게시물이 존재한다면 가장 아래에서 출력문을 통해 상세보기를 원하는 게시물의 고유 번호, 제목, 내용을 출력한다.

 

[게시물 최초등록날짜 저장]

  • 게시물을 최초 작성했을 때의 현재 날짜를 저장하고 "article detail"을 통해 최초등록날짜를 표시하기 위해선 저번에 Util.java에 생성했던 getNowDateStr() 메서드를 호출한다.
class Article {
    int id;
    String regDate;
    String title;
    String body;
    Article(int id, String regDate, String title, String body) {
        this.id = id;
        this.regDate = regDate;
        this.title = title;
        this.body = body;
    }
}
  • 먼저 Article 클래스에 regDate라는 String 변수를 추가하고, 생성자에도 매개변수로 regDate를 받는다.

 

else if(cmd.equals("article write")) {
    int id = lastArticleId + 1;

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

    lastArticleId = id;
    String regDate = Util.getNowDateStr();

    Article article = new Article(id, regDate, title, body);

    articles.add(article);

    System.out.printf("%d번 글이 작성되었습니다.\n", id);
}

else if(cmd.startsWith("article detail ")) {
    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("번호 : %d\n", foundArticle.id);
    System.out.printf("최초등록날짜 : %s\n", foundArticle.regDate);
    System.out.printf("제목 : %s\n", foundArticle.title);
    System.out.printf("내용 : %s\n", foundArticle.body);
}
  • regDate를 Article 클래스에 추가했다면 Main 메서드로 이동하여 게시물을 작성하는 부분인 "article write" 와 게시물의 상세정보를 볼 수 있는 "article detail" 부분의 수정이 필요하다.
  • "article write" 에서는 작성과 동시에 현재 날짜를 담는 변수인 regDate를 생성해주고 현재 날짜는 Util.java에 있는 getNowDateStr() 메서드를 호출한다. [String regDate = Util.getNowDateStr()]
  • 그 다음은 article 객체를 생성할 때 생성자에 날짜 인자를 추가한다. [Article article = new Article(id, regDate, title, body)]
  • "article detail" 에서는 최초등록날짜를 출력할 수 있도록 출력문을 수정한다.

 

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

게시판 3차 동작

 

반응형

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

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