기능을 실행하는 역할을 App에서 ArticleController로 이전
App 클래스
package com.KoreaIT.java.BasicAM;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.KoreaIT.java.BasicAM.controller.ArticleController;
import com.KoreaIT.java.BasicAM.controller.Controller;
import com.KoreaIT.java.BasicAM.controller.MemberController;
import com.KoreaIT.java.BasicAM.dto.Article;
import com.KoreaIT.java.BasicAM.dto.Member;
import com.KoreaIT.java.BasicAM.util.Util;
public class App {
public static List<Article> articles;
public static List<Member> members;
static {
articles = new ArrayList<>();
members = new ArrayList<>();
}
public void run() {
System.out.println("==프로그램 시작==");
makeTestData();
Scanner sc = new Scanner(System.in);
MemberController memberController = new MemberController(members, sc);
ArticleController articleController = new ArticleController(articles, sc);
while (true) {
System.out.printf("명령어 ) ");
String command = sc.nextLine().trim();
if (command.length() == 0) {
System.out.println("명령어를 입력해주세요");
continue;
}
if (command.equals("system exit")) {
break;
}
String[] commandBits = command.split(" ");
if (commandBits.length == 1) {
System.out.println("명령어 확인 후 다시 입력해주세요");
continue;
}
String controllerName = commandBits[0];
String actionMethodName = commandBits[1];
Controller controller = null;
if (controllerName.equals("article")) {
controller = articleController;
} else if (controllerName.equals("member")) {
controller = memberController;
// controllerName = commandBits[0]이 "article"과 같다면 articleController 실행
// controllerName = commandBits[0]이 "member"와 같다면 memberController 실행
} else {
System.out.println("존재하지 않는 명령어 입니다.");
continue;
}
controller.doAction(command, actionMethodName);
// actionMethodName = commandBits[1] 여기서 commandBits[1]은 사용자의 기입 내용에 따라 write, list등이 저장된다.
}
System.out.println("==프로그램 끝==");
sc.close();
}
public static void makeTestData() {
System.out.println("테스트를 위한 데이터를 생성합니다");
articles.add(new Article(1, Util.getNowDateStr(), Util.getNowDateStr(), "제목1", "내용1", 11));
articles.add(new Article(2, Util.getNowDateStr(), Util.getNowDateStr(), "제목2", "내용2", 22));
articles.add(new Article(3, Util.getNowDateStr(), Util.getNowDateStr(), "제목3", "내용3", 33));
}
}
ArticleController 클래스
package com.KoreaIT.java.BasicAM.controller;
import java.util.List;
import java.util.Scanner;
import com.KoreaIT.java.BasicAM.dto.Article;
import com.KoreaIT.java.BasicAM.util.Util;
public class ArticleController extends Controller {
private List<Article> articles;
private Scanner sc;
private String command;
private String actionMethodName;
public ArticleController(List<Article> articles, Scanner sc) {
this.articles = articles;
this.sc = sc;
}
public void doAction(String command, String actionMethodName) {
this.command = command;
this.actionMethodName = actionMethodName;
switch (actionMethodName) {
case "list":
showList();
break;
case "write":
doWrite();
break;
case "detail":
showDetail();
break;
case "modify":
doModify();
break;
case "delete":
doDelete();
break;
}
}
public void showList() {
if (articles.size() == 0) {
System.out.println("게시글이 없습니다");
return;
}
System.out.println("번호 / 제목 / 조회 ");
String tempTitle = null;
for (int i = articles.size() - 1; i >= 0; i--) {
Article article = articles.get(i);
if (article.title.length() > 4) {
tempTitle = article.title.substring(0, 4);
System.out.printf("%4d / %6s / %4d\n", article.id, tempTitle + "...", article.hit);
continue;
}
System.out.printf("%4d / %6s / %4d\n", article.id, article.title, article.hit);
}
}
public void doWrite() {
int id = articles.size() + 1;
String regDate = Util.getNowDateStr();
System.out.printf("제목 : ");
String title = sc.nextLine();
System.out.printf("내용 : ");
String body = sc.nextLine();
Article article = new Article(id, regDate, regDate, title, body);
articles.add(article);
System.out.printf("%d번 글이 생성 되었습니다\n", id);
}
public void showDetail() {
String[] commandBits = command.split(" ");
int id = Integer.parseInt(commandBits[2]);
Article foundArticle = getArticleById(id);
if (foundArticle == null) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", id);
return;
}
foundArticle.increaseHit();
System.out.printf("번호 : %d\n", foundArticle.id);
System.out.printf("작성날짜 : %s\n", foundArticle.regDate);
System.out.printf("수정날짜 : %s\n", foundArticle.updateDate);
System.out.printf("제목 : %s\n", foundArticle.title);
System.out.printf("내용 : %s\n", foundArticle.body);
System.out.printf("조회 : %d\n", foundArticle.hit);
}
public void doModify() {
String[] commandBits = command.split(" ");
int id = Integer.parseInt(commandBits[2]);
Article foundArticle = getArticleById(id);
if (foundArticle == null) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", id);
return;
}
System.out.printf("제목 : ");
String title = sc.nextLine();
System.out.printf("내용 : ");
String body = sc.nextLine();
String updateDate = Util.getNowDateStr();
foundArticle.title = title;
foundArticle.body = body;
foundArticle.updateDate = updateDate;
System.out.printf("%d번 게시물을 수정했습니다\n", id);
}
public void doDelete() {
String[] commandBits = command.split(" ");
int id = Integer.parseInt(commandBits[2]);
int foundIndex = getArticleIndexById(id);
if (foundIndex == -1) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", id);
return;
}
articles.remove(foundIndex);
System.out.printf("%d번 게시물을 삭제했습니다\n", id);
}
public int getArticleIndexById(int id) {
int i = 0;
for (Article article : articles) {
if (article.id == id) {
return i;
}
i++;
}
return -1;
}
public Article getArticleById(int id) {
int index = getArticleIndexById(id);
if (index != -1) {
return articles.get(index);
}
return null;
}
}
개념
- Switch 문
1) if문과 마찬가지로 조건문이지만 변수가 어떤값을 갖느냐에 따라 실행문이 선택