사이먼's 코딩노트

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

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

[Java] 게시판 제작(10)

simonpark817 2024. 3. 7. 23:31

[게시판 제작 ~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, article delete, article modify 이 3가지 명령어를 입력하고 뒤에 고유 게시물 번호를 입력하지 않았을 때 에러가 발생한다.
  • 그 다음은 App.java 클래스에서는 핵심로직만 필요한데 해당 클래스 안에 테스트 데이터를 만드는 메서드도 포함되어 있고 각 articles와 members는 각 컨트롤러에서 생성되는 것이 아니라 App 에서 생성되고 있다.
  • 이런 문제점을 개선하기 위해서 다음과 같이 코드를 수정하였다.
package org.example;

import org.example.controller.ArticleController;
import org.example.controller.Controller;
import org.example.controller.MemberController;
import org.example.dto.Article;
import org.example.dto.Member;
import org.example.util.Util;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class App {
    public void start() {
        System.out.println("== 프로그램 시작 ==");

        Scanner sc = new Scanner(System.in);

        MemberController memberController = new MemberController(sc);
        ArticleController articleController = new ArticleController(sc);

        // 테스트를 위한 데이터 게시물 3개 생성
        articleController.makeTestData();

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

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

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

            // 여기서 split은 공백을 기준으로 쪼갠다는 의미
            String[] cmdBits = cmd.split(" ");      // article xxx xxx

            if(cmdBits.length == 1) {
                System.out.printf("%s(은)는 존재하지 않는 명령어입니다.\n", cmd);
                continue;
            }
            String controllerName = cmdBits[0];             // 0번째 article이나 member을 뽑아냄
            String actionMethodName = cmdBits[1];           // 1번째 각 명령어를 뽑아냄 (join, write, detail, modify, list, delete)

            Controller controller = null;

            if(controllerName.equals("article")) {
                controller = articleController;
            }

            else if(controllerName.equals("member")) {
                controller = memberController;
            }

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

            controller.doAction(cmd, actionMethodName);
        }

        sc.close();

        System.out.println("== 프로그램 끝 ==");
    }
}
// cmdBits에서 숫자를 입력안했을 때 디버깅 (article modify까지만 명령어를 입력했을 때)
if(cmdBits.length <= 2) {
System.out.println("게시물 번호를 입력해주세요");
    return;
}
  • 기존에 작성했던 List<Article> articles = new ArrayList<>() 와 List<Member> members = new ArrayList<>() 는 해당 동작을 ArticleController와 MemberController로 이전하였다.
  • App에서는 각 컨트롤러(articleController, memberController) 객체를 생성하여 연결해주는 코드를 새로 작성해주었다.
  • 또한 테스트 데이터를 만들었던 makeTestData() 메서드는 게시물 관련 기능이기 때문에 ArticleController.java 클래스로 이전해주었고 App에서 해당 메서드를 호출만 하도록 코드를 수정하였다.
  • 마지막으로 명령어를 받는 배열 변수인 cmdBits[] 의 2번째 공간 즉, 게시물 고유 번호를 담는 공간에 입력된 번호가 없다면 "게시물 번호를 입력해주세요"라고 출력문이 출력되면서 명령어를 다시 입력하도록 ArticleController.java 클래스에서 조건문을 추가하였다.

 

  • 각 컨트롤러에 대한 코드는 작성된 코드가 긴 관계로 상단의 리포지터리를 참고 부탁드립니다.

 

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

개선된 게시판 동작

 

[테스트 회원 생성]

  • 이번에는 게시물 관련 기능 중엔 테스트 데이터를 만드는 메서드가 있지만 회원 관련 기능 중에는 테스트 회원을 만드는 메서드가 없어 해당 메서드를 추가하려한다.
  • 해당 기능을 추가하기 위해서 수정 및 추가해야 될 클래스는 총 2군데이다.
  • 먼저 테스트 회원 생성 동작을 수행할 makeTestData() 메서드를 MemberController.java 에 추가해야한다.
  • 그 다음 App에서 해당 메서드를 호출할 수 있도록 App.java 를 수정해야한다.
public void makeTestData() {
    System.out.println("테스트를 위한 회원 데이터를 생성합니다.");

    members.add(new Member(1, Util.getNowDateStr(), "admin", "admin", "관리자"));
    members.add(new Member(2, Util.getNowDateStr(), "user1", "user1", "유저1"));
    members.add(new Member(3, Util.getNowDateStr(), "user1", "user2", "유저2"));
}
// 테스트를 위한 데이터 게시물 3개 생성
articleController.makeTestData();
memberController.makeTestData();
  • 첫번째 코드는 MemberController.java 클래스에 작성된 makeTestData() 메서드이다.
  • 테스트 데이터 생성과 유사하지만 article과 member가 가진 매개변수 값이 서로 다르기 때문에 그 부분을 주의하여 인자 값을 넣어주면 된다.
  • member 생성 시 필요한 값은 고유 번호, 최초등록일자, ID, PW, 이름 이다.
  • 두번째 코드는 App.java 에서 테스트를 위한 데이터들(게시물, 회원)을 모두 호출하는 부분이다.

 

  • 각 클래스에 대한 전체 코드를 보고 싶다면 상단의 리포지터리를 참고 부탁드립니다.

 

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

개선된 게시판 동작 2

 

반응형

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

[Java] 게시판 제작(12)  (0) 2024.03.25
[Java] 게시판 제작(11)  (0) 2024.03.10
[Java] 게시판 제작(9)  (0) 2024.03.04
[Java] 게시판 제작(8)  (0) 2024.03.04
[Java] 게시판 제작(7)  (0) 2024.02.26