사이먼's 코딩노트

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

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

[Java] 게시판 제작(2)

simonpark817 2024. 2. 21. 17:46

[게시판 제작 ~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

 

[작성된 게시물 리스트에 저장]

  • 게시물이 정확히 몇 개인지 알 수 없고, 작성한 수 만큼 게시물의 개수가 늘어나기 때문에 우리는 ArrayList()를 활용하여 게시물의 고유 번호에 따라 리스트에 저장해야한다.
  • 현재 게시물은 'article write' 명령어를 통해 제목, 내용을 작성하고, 게시물의 고유 번호를 가지고 있지만 실제로 해당 정보들을 저장하는 부분이 없다.
  • 먼저, 'article write' 명령어 실행 후 실제로 게시물의 정보를 리스트에 담아 저장할 것이다.
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        System.out.println("== 프로그램 시작 ==");
        Scanner scanner = new Scanner(System.in);

        int lastArticleId = 0;

        List<Article> articles = new ArrayList<>();

        while(true) {
            System.out.printf("명령어) ");
            String cmd = scanner.nextLine();

            cmd = cmd.trim();

            if(cmd.length() == 0) {
                continue;
            }

            if(cmd.equals("system exit")) {
                break;
            }

            else if(cmd.equals("article list")) {
                System.out.println("게시물이 없습니다.");
            }

            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;
                
                Article article = new Article(id, title, body);
                
                articles.add(article);

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

            else {
                System.out.printf("%s(은)는 존재하지 않는 명령어입니다.\n", cmd);
            }
        }

        scanner.close();

        System.out.println("== 프로그램 종료 ==");
    }
}

class Article {
    int id;
    String title;
    String body;
    Article(int id, String title, String body) {
        this.id = id;
        this.title = title;
        this.body = body;
    }
}
  • 먼저 ArrayList() 클래스를 사용하기 위해서 상단에 ArrayList와 List를 import 해준다.
  • 무한 루프에 들어가기 전에 articles라는 배열을 생성해준다. 이 때 articles는 사용자 지정의 타입을 사용할 수 있도록 <Article> 클래스를 캐스팅해준다. [List<Article> articles = new ArrayList()]
  • 그 다음 Main 메서드 밖에서 Article 이라는 클래스를 작성한다. Article 설계도에는 고유 번호, 제목, 내용이 담겨있고, 생성자를 통해 객체가 추가 될 때 자동으로 해당 값들을 각 변수에 넣어준다.
  • 게시물을 작성하고 나서 해당 정보들을 리스트에 저장하는 순서이기 때문에 'article write' 명령어가 이루어지는 곳에 새로운 article 객체를 만들어준다. 이 때, 생성자 매개변수에 맞게 인자를 작성해주면 된다. [Article article = new article(id, title, body)]
  • article에 담긴 게시물의 정보는 다시 articles 배열에 저장해준다. [articles.add(article)]
  • 이렇게 되면 게시물을 작성할 때마다 article 객체를 생성하여 articles 배열에 하나씩 데이터를 쌓게된다.

 

[게시물 리스트 완성]

  • 앞서 진행된 작업에 이에서 이번엔 게시물의 정보를 리스트에 담아 저장한 후 'article list' 명령어를 통해 작성한 모든 게시물의 고유 번호와 제목을 리스트화 하려한다.
  • 아래 코드는 Main 메서드의 'article list' 명령어 부분이다.
else if(cmd.equals("article list")) {
    if(articles.size() == 0) {
        System.out.println("게시물이 없습니다.");
        continue;
    }

    System.out.println("번호 | 제목");
    for(int i = articles.size() - 1; i >= 0; i--) {
        Article article = articles.get(i);
        System.out.printf("%d | %s\n", article.id, article.title);
    }

}
  • 기존에 'article list' 명령어를 입력하면 바로 게시물이 없다고 출력되었지만 이번엔 조건을 주어 배열의 크기가 0일 때(articles.size() == 0) 즉, 게시물이 하나도 존재하지 않을 때 "게시물이 없습니다."라고 출력된다.
  • 그리고 저장된 고유 번호와 제목을 출력하기 위해서 article 변수를 생성하여 articles에 담겨있는 정보들을 고유 번호별로 가져온다. [Article article = articles.get(i)]
  • 이 때 반복문의 포폭 범위는 가장 최근의 저장된 게시물 고유 번호가 위로 가게끔 하였다.
  • 이렇게 설정하면 만약 1번, 2번 게시물이 생성되었을 때 콘솔에서는 2번 게시물이 가장 상단에 위치하게 된다.
  • 마지막으로 각 고유 번호와 제목을 출력문을 통해 출력한다. 

 

[현재 날짜 클래스 만들기]

  • 추후 각 게시물을 최초 등록하고 게시물의 상세보기를 통해 최초등록날짜를 볼 수 있도록 현재 날짜를 출력할 수 있는 class를 만들어보자.
  • 여기서 현재 날짜는 년도, 월, 날짜, 시간, 분, 초 모두를 의미한다.
  • 해당 코드는 Main.java에서 작성하지 않고 Util.java라는 새 자바 클래스를 하나 생성하여 작성할 것이다.
  • Util 클래스는 라이브러리 같은 공간으로서 앞으로 상용화된 메서드를 사용할 때 관리하기 쉽게 모아두기 위해 새로 생성하였다.
import java.text.SimpleDateFormat;
import java.util.Date;

public class Util {

    public static String getNowDateStr() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date today = new Date();
        
        return dateFormat.format(today);
    }
}
  • 위 코드는 현재 날짜와 시간을 모두 받아 내가 원하는 패턴으로 바꾸고 해당 날짜를 return 해준다.
  • 날짜의 출력형태는 문자열이기 때문에 getNowDateStr() 메서드는 void가 아닌 String으로 변경해주고 매개변수로 어떤 값도 넘겨받지 않는다.
  • 앞으로 Main.java에서 현재 날짜를 불러오고 싶다면 Util.getNowDateStr() 로 호출하면 된다.

 

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

게시판 2차 동작

 

 

반응형

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

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