Java 게시판 #7일차

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

기능을 실행하는 역할을 App에서 MemberControll로 이전

  • 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(" "); // article detail 1 / member join
    
    				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;
    				} else {
    					System.out.println("존재하지 않는 명령어 입니다.");
    					continue;
    				}
    
    				controller.doAction(command, actionMethodName);

// if (command.equals("member join")) {
// memberController.doJoin();
// } else if (command.equals("article list")) {
// articleController.showList();
// } else if (command.equals("article write")) {
// articleController.doWrite();
// } else if (command.startsWith("article detail ")) {
// articleController.showDetail(command);
// } else if (command.startsWith("article modify ")) {
// articleController.doModify(command);
// } else if (command.startsWith("article delete ")) {
// articleController.doDelete(command);
// }
// else {
// System.out.println("존재하지 않는 명령어입니다");
// }

	}

	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));
}

}

MemberController 도입
ArticleController 도입

  • MemberController

package com.KoreaIT.java.BasicAM.controller;

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

import com.KoreaIT.java.BasicAM.dto.Member;
import com.KoreaIT.java.BasicAM.util.Util;

public class MemberController {

private List<Member> members;
private Scanner sc;

public MemberController(List<Member> members, Scanner sc) {
	this.members = members;
	this.sc = sc;
}

public void doJoin() {
	int id = members.size() + 1;
	String regDate = Util.getNowDateStr();

	String loginId = null;
	while (true) {
		System.out.printf("로그인 아이디 : ");
		loginId = sc.nextLine();

		if (isJoinableLoginId(loginId) == false) {
			System.out.println("이미 사용중인 아이디입니다.");
			continue;
		}

		break;
	}

	String loginPw = null;
	String loginPwConfirm = null;
	while (true) {
		System.out.printf("로그인 비밀번호 : ");
		loginPw = sc.nextLine();
		System.out.printf("로그인 비밀번호 확인: ");
		loginPwConfirm = sc.nextLine();

		if (loginPw.equals(loginPwConfirm) == false) {
			System.out.println("비밀번호를 다시 입력해주세요");
			continue;
		}

		break;
	}
	System.out.printf("이름 : ");
	String name = sc.nextLine();

	Member member = new Member(id, regDate, regDate, loginId, loginPw, name);
	members.add(member);

	System.out.printf("%d번 회원이 가입 되었습니다\n", id);

}

private boolean isJoinableLoginId(String loginId) {

	int index = getMemberIndexByLoginId(loginId);

	if (index == -1) {
		return true;
	}

	return false;
}

public int getMemberIndexByLoginId(String loginId) {
	int i = 0;
	for (Member member : members) {
		if (member.loginId.equals(loginId)) {
			return i;
		}
		i++;
	}
	return -1;
}

}

- 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 {

private List<Article> articles;
private Scanner sc;

public ArticleController(List<Article> articles, Scanner sc) {
	this.articles = articles;
	this.sc = sc;
}

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 command) {
	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 command) {
	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 command) {
	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;
}

}

  • Controller

    package com.KoreaIT.java.BasicAM.controller;
    
    	public abstract class Controller {
    		public abstract void doAction(String command, String actionMethodName);
    	}

    // Controller에서 doAction 수행

profile
개발자로 취직하고싶다!

0개의 댓글