package board;
import board.ui.BoardUI;
public class BoardMain {
public static void main(String[] args) {
BoardUI ui = new BoardUI();
try {
ui.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}
===================================================================
package board;
// 게시판 번호 생성
public class BoardSequence {
private static int no = 1;
public static synchronized int getNo() {
return no++;
}
}
===================================================================
package board;
import board.service.BoardService;
public class BoardServiceFactory {
private static BoardService service = null;
public static synchronized BoardService getInstance() {
if(service == null) {
service = new BoardService();
}
return service;
}
}
===================================================================
package board.dao;
import java.util.ArrayList;
import board.vo.BoardVO;
// 게시글 저장 & 처리...
public class BoardDAO {
private ArrayList<BoardVO> list = new ArrayList<>();
/**
* 게시글을 등록하는 메소드
* @param board
*/
public void insertBoard(BoardVO board) {
list.add(board);
}
/**
* 전체게시물을 조회하는 메소드
*/
public ArrayList<BoardVO> selectBoard() {
return list;
}
/**
* 게시글 번호로 조회하는 메소드
*/
public BoardVO selectOneBoard(BoardVO board) {
for(BoardVO vo : list) {
if(vo.getNo() == board.getNo())
return vo;
}
return null;
}
/**
* 게시물 삭제하는 메소드
*/
public boolean deleteBoard(BoardVO board) {
for(BoardVO vo : list) {
if(board.getNo() == vo.getNo()) {
list.remove(vo);
return true;
}
}
return false;
}
/**
* 게시글을 수정하는 메소드
*/
public void updateBoard(BoardVO board) {
for(BoardVO vo : list) {
if(vo.getNo() == board.getNo()) {
String title = board.getTitle();
vo.setTitle(title);
break;
}
}
}
}
===================================================================
package board.service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import board.BoardSequence;
import board.dao.BoardDAO;
import board.vo.BoardVO;
public class BoardService {
private BoardDAO dao;
// BoardService를 singletone pattern 구현 동작...
//------------------------------------------------
// private static BoardService service;
//
// private BoardService() {
// dao = new BoardDAO();
// }
//
// public static BoardService getInstance() {
// if(service == null) {
// service = new BoardService();
// }
// return service;
// }
//------------------------------------------------
// BoardServiceFactory().getInstance() 동작...
public BoardService() {
dao = new BoardDAO();
}
public void insertBoard(BoardVO board) throws Exception {
// 게시글 번호 setting
int no = BoardSequence.getNo();
// 등록일 설정
String pattern = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String regDate = sdf.format(new Date());
board.setNo(no);
board.setRegDate(regDate);
dao.insertBoard(board);
}
public void updateBoard(BoardVO board) throws Exception {
dao.updateBoard(board);
}
public boolean deleteBoard(BoardVO board) throws Exception {
boolean result = dao.deleteBoard(board);
return result;
}
public BoardVO selectOneBoard(BoardVO board) throws Exception {
BoardVO result = dao.selectOneBoard(board);
return result;
}
public ArrayList<BoardVO> selectBoard() {
ArrayList<BoardVO> list = dao.selectBoard();
return list;
}
}
===================================================================
package board.vo;
public class BoardVO {
private int no;
private String title;
private String writer;
private String regDate;
// private Date regDate;
// alt + shift + s 누른 후 c
public BoardVO() {
super();
// TODO Auto-generated constructor stub
}
// alt + shift + s 누른후 o
public BoardVO(int no, String title, String writer, String regDate) {
super();
this.no = no;
this.title = title;
this.writer = writer;
this.regDate = regDate;
}
// alt + shift + s 누른 후 r 선택
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getRegDate() {
return regDate;
}
public void setRegDate(String regDate) {
this.regDate = regDate;
}
// alt + shift + s 누른 후 s 선택
@Override
public String toString() {
return "BoardVO [no=" + no + ", title=" + title + ", writer=" + writer + ", regDate=" + regDate + "]";
}
}
===================================================================
package board.ui;
import java.util.Scanner;
import board.BoardServiceFactory;
import board.service.BoardService;
public abstract class BaseUI implements IBoardUI {
private Scanner sc = new Scanner(System.in);
protected BoardService service;
public BaseUI() {
// service = BoardService.getInstance(); // singleton pattern
service = BoardServiceFactory.getInstance();
}
protected int scanInt(String msg) {
System.out.print(msg);
return Integer.parseInt(sc.nextLine());
}
protected String scanStr(String msg) {
System.out.print(msg);
return sc.nextLine();
}
}
===================================================================
package board.ui;
public class BoardUI extends BaseUI {
public void execute() throws Exception {
while(true) {
String type = menu();
IBoardUI ui = null;
switch (type) {
case "1":
ui = new SearchUI(); // 전체 게시글 조회화면
break;
case "2":
ui = new SearchOneUI(); // 게시글 번호 조회화면
break;
case "3":
ui = new AddUI();
break;
case "4":
ui = new UpdateUI();
break;
case "5":
ui = new DeleteUI();
break;
case "0":
ui = new ExitUI();
break;
}
if(ui != null) {
ui.execute();
}
}
}
String menu() {
System.out.println("----------------------------------------");
System.out.println("1. 전체 게시물 조회");
System.out.println("2. 글번호 조회");
System.out.println("3. 글등록");
System.out.println("4. 글수정");
System.out.println("5. 글삭제");
System.out.println("0. 종료");
System.out.println("----------------------------------------");
String type = scanStr("메뉴 중 처리할 항목을 선택하세요 : ");
return type;
}
}
===================================================================
package board.ui;
public interface IBoardUI {
void execute() throws Exception;
}
===================================================================
package board.ui;
import board.vo.BoardVO;
public class AddUI extends BaseUI {
@Override
public void execute() throws Exception {
String title = scanStr("제목을 입력하세요 : ");
String writer = scanStr("글쓴이를 입력하세요 : ");
BoardVO board = new BoardVO();
board.setTitle(title);
board.setWriter(writer);
service.insertBoard(board);
System.out.println("게시글을 등록하였습니다.");
}
}
===================================================================
package board.ui;
import board.vo.BoardVO;
public class UpdateUI extends BaseUI {
public void execute() throws Exception {
int no = scanInt("수정할 글번호를 입력하세요 : ");
String title = scanStr("변경할 제목을 입력하세요 : ");
BoardVO board = new BoardVO();
board.setNo(no);
board.setTitle(title);
service.updateBoard(board);
System.out.println("게시글을 수정되었습니다.");
}
}
===================================================================
package board.ui;
import board.vo.BoardVO;
public class DeleteUI extends BaseUI {
@Override
public void execute() throws Exception {
int no = scanInt("삭제할 글번호를 입력하세요 : ");
BoardVO board = new BoardVO();
board.setNo(no);
boolean bool = service.deleteBoard(board);
if(bool) {
System.out.println("게시글을 삭제하였습니다.");
} else {
System.out.println("해당 게시물을 존재하지 않습니다.");
}
}
}
===================================================================
package board.ui;
import java.util.ArrayList;
import board.vo.BoardVO;
public class SearchUI extends BaseUI {
public void execute() throws Exception {
// 서비스 메소드 호출...
ArrayList<BoardVO> list = service.selectBoard();
// 화면에 결과 출력
System.out.println("게시글 목록 : 전체 " + list.size() + "개");
System.out.println("--------------------------------------------------");
System.out.println("번호\t글쓴이\t등록일\t제목");
System.out.println("--------------------------------------------------");
for(BoardVO board : list) {
System.out.print(board.getNo() + "\t");
System.out.print(board.getWriter() + "\t");
System.out.print(board.getRegDate() + "\t");
System.out.println(board.getTitle());
}
if(list.isEmpty()) {
System.out.println("\t조회할 게시물이 없습니다.");
}
System.out.println("--------------------------------------------------");
}
}
===================================================================
package board.ui;
import board.vo.BoardVO;
public class SearchOneUI extends BaseUI {
public void execute() throws Exception {
int no = scanInt("글번호를 입력하세요 : ");
BoardVO board = new BoardVO();
board.setNo(no);
BoardVO result = service.selectOneBoard(board);
// 화면에 조회한 결과를 출력
if(result == null) {
System.out.println("글번호 [" + no + "]번 게시물은 존재하지 않습니다.");
} else {
System.out.println(result.getNo() + "번 게시글");
System.out.println("----------------------------------");
System.out.println("번 호 : " + result.getNo());
System.out.println("제 목 : " + result.getTitle());
System.out.println("글쓴이 : " + result.getWriter());
System.out.println("등록일 : " + result.getRegDate());
System.out.println("----------------------------------");
}
}
}
===================================================================
package board.ui;
public class ExitUI extends BaseUI {
public void execute() {
System.out.println("게시판 프로그램을 종료합니다.");
System.exit(0);
}
}
===================================================================