사이먼's 코딩노트
[Java] 게시판 제작(10) 본문
[게시판 제작 ~ing]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 리포지터리 주소 URL : https://github.com/psm817/full_stack_proj_2024_03
[문제점 개선]
- 현재까지 구현된 게시판 프로그램에서 문제점이 있다면 다음과 같은 문제가 있다.
- 먼저 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 에서 테스트를 위한 데이터들(게시물, 회원)을 모두 호출하는 부분이다.
- 각 클래스에 대한 전체 코드를 보고 싶다면 상단의 리포지터리를 참고 부탁드립니다.
- 현재까지 작성 및 수정된 코드를 실행하면 다음과 같이 게시판이 동작한다.
반응형
'프로젝트 > [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 |