Java 게시판 #8일차

김신하·2023년 2월 19일
post-thumbnail

기능을 실행하는 역할을 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문과 마찬가지로 조건문이지만 변수가 어떤값을 갖느냐에 따라 실행문이 선택
profile
개발자로 취직하고싶다!

0개의 댓글