본문 바로가기

Java

#066 게시글 Listing / Select / Board 까지 전체 코드 정리 1차

Main

더보기
package com.sbs.example.easytextboard;

public class Main {

	public static void main(String[] args) {
		new App().run();

	}

}

App

더보기
package com.sbs.example.easytextboard;

import java.util.Scanner;

import com.sbs.example.easytextboard.container.Container;
import com.sbs.example.easytextboard.controller.ArticleController;
import com.sbs.example.easytextboard.controller.Controller;
import com.sbs.example.easytextboard.controller.MemberController;
import com.sbs.example.easytextboard.service.ArticleService;
import com.sbs.example.easytextboard.service.MemberService;

public class App {
	private MemberController memberController;
	private ArticleController articleController;

	public App() {
		memberController = Container.memberController;
		articleController = Container.articleController;

		makeTestData();

		init();
	}

	private void init() {
		ArticleService articleService = Container.articleService;
		Container.session.selectedBoardId = articleService.getDefultBoardId();

	}

	private void makeTestData() {
		// 회원 2명 생성
		MemberService memberService = Container.memberService;
		int firstMemberId = memberService.join("aaa", "aaa", "aaa");
		int secondMemberId = memberService.join("bbb", "bbb", "bbb");

		// 테스트 게시판 2개 생성
		ArticleService articleService = Container.articleService;
		int noticeBoardId = articleService.makeBoard("공지사항");
		int freeBoardId = articleService.makeBoard("자유");

	}

	public void run() {
		Scanner sc = Container.scanner;

		while (true) {
			System.out.printf("명령어 입력 : ");
			String command = sc.nextLine();

			if (command.equals("system exit")) {
				System.out.println("== 프로그램 종료 ==");
				break;
			}
			Controller controller = getControllerByCommand(command);
			if (controller == null) {
				System.out.println("존재하지 않는 명령어 입니다.");
				continue;
			}
			if (controller != null) {
				controller.doCommand(command);
			}
		}

		sc.close();

	}

	private Controller getControllerByCommand(String command) {
		if (command.startsWith("member ")) {
			return memberController;
		} else if (command.startsWith("article ")) {
			return articleController;
		}
		return null;
	}

}

 

Container

더보기
package com.sbs.example.easytextboard.container;

import java.util.Scanner;

import com.sbs.example.easytextboard.controller.ArticleController;
import com.sbs.example.easytextboard.controller.MemberController;
import com.sbs.example.easytextboard.dao.ArticleDao;
import com.sbs.example.easytextboard.dao.MemberDao;
import com.sbs.example.easytextboard.service.ArticleService;
import com.sbs.example.easytextboard.service.MemberService;
import com.sbs.example.easytextboard.session.Session;

public class Container {

	public static Scanner scanner;
	public static Session session;
	public static ArticleService articleService;
	public static MemberService memberService;
	public static ArticleDao articleDao;
	public static MemberDao memberDao;
	public static MemberController memberController;
	public static ArticleController articleController;

	static {
		scanner = new Scanner(System.in);
		session = new Session();

		articleDao = new ArticleDao();
		memberDao = new MemberDao();

		articleService = new ArticleService();
		memberService = new MemberService();

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

	}
}

Controller

더보기

Article Controller

package com.sbs.example.easytextboard.controller;

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

import com.sbs.example.easytextboard.container.Container;
import com.sbs.example.easytextboard.dto.Article;
import com.sbs.example.easytextboard.dto.Board;
import com.sbs.example.easytextboard.dto.Member;
import com.sbs.example.easytextboard.service.ArticleService;
import com.sbs.example.easytextboard.service.MemberService;

public class ArticleController extends Controller {

	private ArticleService articleService;
	private MemberService memberService;

	public ArticleController() {
		articleService = Container.articleService;
		memberService = Container.memberService;
	}

	public void doCommand(String command) {
		if (command.equals("article add")) {
			add(command);
		} else if (command.startsWith("article list ")) {
			list(command);
		} else if (command.equals("article list")) {
			list(command);
		} else if (command.startsWith("article detail ")) {
			detail(command);
		} else if (command.startsWith("article delete ")) {
			delete(command);
		} else if (command.startsWith("article modify ")) {
			modify(command);
		} else if (command.startsWith("article search ")) {
			search(command);
		} else if (command.equals("article makeBoard")) {
			makeBoard(command);
		} else if (command.startsWith("article selectBoard ")) {
			selectBoard(command);
		} else if (command.equals("article currentBoard")) {
			currentBoard(command);
		} else if (command.equals("article test")) {
			test(command);
		}

	}

	private void test(String command) {
		articleService.test();

	}

	private void currentBoard(String command) {
		if (Container.session.selectedBoardId == 0) {
			System.out.println("게시판 선택 후 이용해 주세요.");
			return;
		}

		Board board = articleService.getBoardById(Container.session.selectedBoardId);
		System.out.printf("현재 \"%s\" 게시판이 선택되어있는 상태입니다.\n", board.name);

	}

	private void selectBoard(String command) {
		int inputedId = 0;

		try {
			inputedId = Integer.parseInt(command.split(" ")[2]);
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("입력된 게시판 번호가 존재하지 않습니다.");
			return;
		} catch (NumberFormatException e) {
			System.out.println("게시판 번호는 양의 정수를 입력해주세요.");
			return;
		}

		Board board = articleService.getBoardById(inputedId);

		if (board == null) {
			System.out.printf("%d번 게시판은 존재하지 않습니다.\n", inputedId);
			return;
		}
		System.out.printf("%s(%d번) 게시판이 선택되었습니다.\n", board.name, board.id);
		Container.session.selectedBoard(board.id);

	}

	private void makeBoard(String command) {
		System.out.println("== 게시판 생성 ==");

		System.out.printf("게시판 이름 : ");
		String boardName = Container.scanner.nextLine();

		int boardId = articleService.makeBoard(boardName);
		System.out.printf("%s (%d번) 게시판이 생성되었습니다.\n", boardName, boardId);

	}

	private void search(String command) {
		String[] commandBits = command.split(" ");
		String searchKeyword = commandBits[2];

		int page = 0;

		if (commandBits.length >= 4) {
			try {
				page = Integer.parseInt(commandBits[3]);
			} catch (NumberFormatException e) {
				System.out.println("페이지 번호는 양의 정수로 입력해주세요.");
				return;
			}
		}

		if (page <= 1) {
			page = 1;
		}

		List<Article> searchResultArticles = new ArrayList<>();
		for (Article article : articleService.getArticles()) {
			if (article.title.contains(searchKeyword)) {
				searchResultArticles.add(article);
			}
		}

		int itemsInAPage = 10;
		int startPos = searchResultArticles.size() - 1;
		startPos -= (page - 1) * itemsInAPage;
		int endPos = startPos - (itemsInAPage - 1);

		if (searchResultArticles.size() == 0) {
			System.out.println("검색결과가 존재하지 않습니다.");
			return;
		}
		if (startPos < 0) {
			System.out.printf("%d페이지는 존재하지 않습니다.\n", page);
			return;
		}
		if (endPos < 0) {
			endPos = 0;
		}
		System.out.println("== 게시물 검색 ==");
		System.out.println("번호 / 제목");
		for (int i = startPos; i >= endPos; i--) {
			Article article = searchResultArticles.get(i);
			System.out.printf("%d / %s\n", article.id, article.title);
		}

	}

	private void modify(String command) {
		if (Container.session.isLogout()) {
			System.out.println("로그인 후 이용해주세요");
			return;
		}

		int inputedId = 0;
		try {
			inputedId = Integer.parseInt(command.split(" ")[2]);
		} catch (NumberFormatException e) {
			System.out.println("게시물 번호는 양의 정수를 입력해 주세요.");
			return;
		}

		System.out.printf("수정할 제목 : ");
		String title = Container.scanner.nextLine();
		System.out.printf("수정할 제목 : ");
		String body = Container.scanner.nextLine();

		Article article = articleService.modify(inputedId, title, body);

		if (article == null) {
			System.out.printf("%d번 게시물은 존재하지 않습니다.\n", inputedId);
			return;
		}

		System.out.printf("%d번 게시물이 수정되었습니다.\n", inputedId);

	}

	private void delete(String command) {

		if (Container.session.isLogout()) {
			System.out.println("로그인 후 이용해주세요");
			return;
		}

		int inputedId = 0;
		try {
			inputedId = Integer.parseInt(command.split(" ")[2]);
		} catch (NumberFormatException e) {
			System.out.println("게시물 번호는 양의 정수를 입력해 주세요.");
			return;
		}

		Article article = articleService.getArticle(inputedId);

		if (article == null) {
			System.out.printf("%d번 게시물은 존재하지 않습니다.\n", inputedId);
			return;
		}

		articleService.remove(inputedId);
		System.out.printf("%d번 게시물이 삭제 되었습니다.\n", inputedId);

	}

	private void detail(String command) {
		int inputedId = 0;
		try {
			inputedId = Integer.parseInt(command.split(" ")[2]);
		} catch (NumberFormatException e) {
			System.out.println("게시물 번호는 양의 정수를 입력해 주세요.");
			return;
		}

		Article article = articleService.getArticle(inputedId);
		if (article == null) {
			System.out.printf("%d번 게시물은 존재하지 않습니다.\n", inputedId);
			return;
		}

		Member member = memberService.getMemberById(article.memberId);

		System.out.println("== 게시물 상세 ==");
		System.out.printf("번호 : %d\n", article.id);
		System.out.printf("작성자 : %s\n", member.name);
		System.out.printf("제목 : %s\n", article.title);
		System.out.printf("내용 : %s\n", article.body);
	}

	private void list(String command) {
		int boardId = Container.session.selectedBoardId;
		Board board = articleService.getBoardById(boardId);

		int page = 0;
		try {
			page = Integer.parseInt(command.split(" ")[2]);
		} catch (ArrayIndexOutOfBoundsException e) {
			page = 1;
		} catch (NumberFormatException e) {
			System.out.println("페이지 번호는 양의 정수를 입력해 주세요.");
			return;
		}

		if (page <= 1) {
			page = 1;
		}

		List<Article> selectedBoardArticles = new ArrayList<>();
		for (Article article : articleService.getArticles()) {
			if (article.boardId == boardId) {
				selectedBoardArticles.add(article);
			}
		}

		int itemsInAPage = 10;
		int startPos = selectedBoardArticles.size() - 1;
		startPos -= (page - 1) * itemsInAPage;
		int endPos = startPos - (itemsInAPage - 1);

		if (selectedBoardArticles.size() == 0) {
			System.out.println("게시물이 존재하지 않습니다.");
			return;
		}
		if (startPos < 0) {
			System.out.printf("%d페이지는 존재하지 않습니다.\n", page);
			return;
		}
		if (endPos < 0) {
			endPos = 0;
		}

		System.out.printf("== %s 게시판 게시물 리스트 ==\n", board.name);
		System.out.println("번호 / 작성자 / 제목");

		for (int i = startPos; i >= endPos; i--) {
			Article article = selectedBoardArticles.get(i);
			Member member = memberService.getMemberById(article.memberId);
			System.out.printf("%d / %s / %s\n", article.id, member.name, article.title);
		}

	}

	private void add(String command) {

		if (Container.session.isLogout()) {
			System.out.println("로그인 후 이용해주세요");
			return;
		}

		System.out.println("== 게시물 등록 ==");

		System.out.printf(" 제목 : ");
		String title = Container.scanner.nextLine();
		System.out.printf(" 내용 : ");
		String body = Container.scanner.nextLine();

		int memberId = Container.session.loginedMemberId;
		int boardId = Container.session.selectedBoardId;

		int id = articleService.add(title, body, memberId, boardId);
		System.out.printf("%d번 게시물이 생성되었습니다.\n", id);
	}

}

 

MemberController

package com.sbs.example.easytextboard.controller;

import com.sbs.example.easytextboard.container.Container;
import com.sbs.example.easytextboard.dto.Member;
import com.sbs.example.easytextboard.service.MemberService;

public class MemberController extends Controller {

	private MemberService memberService;

	public MemberController() {
		memberService = Container.memberService;
	}

	public void doCommand(String command) {
		if (command.equals("member join")) {
			join(command);
		} else if (command.equals("member login")) {
			login(command);
		} else if (command.equals("member whoami")) {
			whoami(command);
		} else if (command.equals("member logout")) {
			logout(command);
		}

	}

	private void logout(String command) {
		if (Container.session.isLogout()) {
			System.out.println("로그인 후 이용해 주세요");
			return;
		}

		Container.session.logout();
		System.out.println("정상적으로 로그아웃 되었습니다.");

	}

	private void whoami(String command) {
		if (Container.session.isLogout()) {
			System.out.println("로그인 후 이용해 주세요");
			return;
		}

		int loginedMemberId = Container.session.loginedMemberId;

		Member loginedMember = memberService.getMemberById(loginedMemberId);

		System.out.println("== 로그인된 사용자 정보 ==");
		System.out.printf("로그인 아이디 : %s\n", loginedMember.loginId);
		System.out.printf("이름 : %s\n", loginedMember.name);

	}

	private void login(String command) {

		if (Container.session.isLogined()) {
			System.out.println("이미 로그인 중입니다.");
			return;
		}

		System.out.println("== 로그인 ==");

		String loginId;
		String loginPw;

		Member member = null;

		int loginIdCount = 0;
		int loginIdMaxCount = 3;
		int loginPwCount = 0;
		int loginPwMaxCount = 3;

		while (true) {

			if (loginIdCount >= loginIdMaxCount) {
				System.out.println("로그인을 취소합니다.");
				return;
			}

			System.out.printf("로그인 아이디 : ");
			loginId = Container.scanner.nextLine().trim();

			if (loginId.length() == 0) {
				System.out.println("입력된 값이 존재하지 않습니다.");
				loginIdCount++;
				continue;
			}

			member = memberService.getMemberByLoginId(loginId);

			if (member == null) {
				System.out.println("존재하지 않는 아이디 입니다.");
				loginIdCount++;
				continue;
			}
			break;
		}

		while (true) {
			if (loginPwCount >= loginPwMaxCount) {
				System.out.println("로그인을 취소합니다.");
				return;
			}

			System.out.printf("로그인 비밀번호 : ");
			loginPw = Container.scanner.nextLine().trim();

			if (loginPw.length() == 0) {
				System.out.println("입력된 값이 존재하지 않습니다.");
				loginPwCount++;
				continue;
			}

			if (member.loginPw.equals(loginPw) == false) {
				System.out.println("비밀번호가 일치하지 않습니다.");
				loginPwCount++;
				continue;
			}
			break;
		}

		Container.session.login(member.memberId);
		System.out.printf("로그인 성공, %s님 환영합니다.\n", member.name);

	}

	private void join(String command) {
		System.out.println("== 회원 가입 ==");

		String loginId;
		String loginPw;
		String name;

		int loginIdCount = 0;
		int loginIdMaxCount = 3;

		while (true) {
			if (loginIdCount >= loginIdMaxCount) {
				System.out.println("회원가입을 취소합니다.");
				return;
			}
			System.out.printf("로그인 아이디 : ");
			loginId = Container.scanner.nextLine().trim();

			if (loginId.length() == 0) {
				System.out.println("입력된 값이 존재하지 않습니다.");
				loginIdCount++;
				continue;
			}

			boolean isJoinableLoginId = memberService.isJoinableLoginId(loginId);

			if (isJoinableLoginId == false) {
				System.out.printf("%s(은)는 이미 사용중인 아이디 입니다.\n", loginId);
				loginIdCount++;
				continue;
			}
			break;
		}

		System.out.printf("로그인 비밀번호 : ");
		loginPw = Container.scanner.nextLine();

		System.out.printf("이름 : ");
		name = Container.scanner.nextLine();

		int id = memberService.join(loginId, loginPw, name);
		System.out.printf("%d번 회원이 생성되었습니다.\n", id);

	}

}

 

Controller

package com.sbs.example.easytextboard.controller;

public abstract class Controller {

	public abstract void doCommand(String command);

}

 

 

*전체적인 일상은 노션을 통해 작성하고 있습니다.

링크 : www.notion.so/026-e329c0e1fc3c4a9fb978f8b040d44ee1