다연이네

[days04] 게시판 만들기 본문

JDBC

[days04] 게시판 만들기

 다연  2020. 11. 26. 18:36
반응형

1. 테이블만들고 시퀀스 생성 - Oracle에서 작업

create sequence SEQ_TBL_CSTVSBOARD;

create table TBL_CSTVSBOARD (
    seq number not null primary key
    , writer varchar2(20) not null
    , pwd varchar2(20) not null
    , email varchar2(100) 
    , title varchar2(200) not null
    , writedate date default sysdate
    , readed number default 0
    , tag number(1) default  0   -- 0 text , 1 html
    , content clob
);

2. DTO 생성 - BoardDTO ( 테이블 정보를 가지고 있음 )

위의 테이블의 컬럼들을 모두 변수로 선언한 후, default 생성자와 getter-setter를 준다.

package days04.board;

import java.util.Date;
//VO ==DTO == 자바빈즈 (Java Bean) == POJO
public class BoardDTO {

	private int seq ;
	private String writer;
	private String pwd;
	private String email;
	private String title;
	private Date writedate ;
	private int readed ;
	private int tag;
	private String content;



	//default constructor
	public BoardDTO() {
		super();
	}


	//getter setter
	public int getSeq() {
		return seq;
	}
	public void setSeq(int seq) {
		this.seq = seq;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Date getWritedate() {
		return writedate;
	}
	public void setWritedate(Date writedate) {
		this.writedate = writedate;
	}
	public int getReaded() {
		return readed;
	}
	public void setReaded(int readed) {
		this.readed = readed;
	}
	public int getTag() {
		return tag;
	}
	public void setTag(int tag) {
		this.tag = tag;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}



}

3. DAO 생성 - BoardDAO INTERFACE로 생성한 후, 해당 인터페이스를 implements 하는 클래스 생성 - BoardDAOImpl

package days04.board;

import java.sql.SQLException;
import java.util.ArrayList;

public interface BoardDAO { //인터페이스는 상수와 추상메소드만 들어가 있어야 함
	//1. 모든 게시글 목록 반환하는 메소드 선언
	ArrayList<BoardDTO> select() throws SQLException; //관련 예외 호출하는 놈에게 떠넘기기겠다
	//1-1 해당 페이지의 게시글 목록 반환하는 메소드
	ArrayList<BoardDTO> select(int currentPage, int numberPerPage) throws SQLException; 
										//매개변수 : 보고자 하는 페이지, 한 페이지에 뿌릴 개수
	
	//2. 게시글 쓰기 메소드
	int insert( BoardDTO dto) throws SQLException;
	
	//3. 조회수 증가 메소드 선언 
	void increaseReaded(int seq)throws SQLException;
	//4. 해당 게시글 상세 보기 메소드 선언
	BoardDTO view(int seq) throws SQLException;
	
	//5. 총 페이지 수를 반환하는 메소드 선언 
	int getTotalPages(int numberPerPage) throws SQLException;
	//6. 검색 메소드 선언
	ArrayList<BoardDTO> select(int currentPage, int numberPerPage, int searchCondition, String searchWord) throws SQLException;
	//7. 검색된 결과의 총 페이지수를 반환하는 메소드 선언
	int getTotalPages(int numberPerPage
			, int searchCondition, String searchWord) throws SQLException;
	//8. 게시글 삭제 메소드 선언 
	int delete(int seq) throws SQLException;
	
	
	
	//select() : 모든 게시글 정보를 셀렉해서 어레이리스트에 담음
	//

}
package days04.board;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.util.DBConn;

public class BoardDAOImpl implements BoardDAO {
	
	private Connection con = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;
	
	//디폴트 생성자
	public BoardDAOImpl() {
		//this.con = DBConn.getConnection();
		//이거 좋은코딩 아님, 결합성이 높은 코딩
		//엔진고장나면 자동차 버리는 꼴
	}
	
	//1 생성자에 의해 의존성주입
	public BoardDAOImpl(Connection con) { //커넥션 객체를 외부에서 주입받아 오기
		this.con = con; //Connection 객체를 의존성 주입 (DI)
	}//같은 커넥션을 여러번 생성하지 않겠다는 뜻
	
	//2 또는 커넥션 객체의 set만 만들기
	//setter에 의해 의존성 주입  (1이나 2 둘다 좋음)
	public void setCon(Connection con) {
		this.con = con;
	}

	@Override
	public ArrayList<BoardDTO> select() throws SQLException {
		//모든 게시글 가져오도록 처리
		//모든 게시글 가져와 어레이리스트에 담아 리턴
		String sql = "SELECT seq, title, writer, writedate, readed "
							+ " FROM TBL_CSTVSBOARD "
							+ " ORDER BY seq DESC ";
		
		this.pstmt = this.con.prepareStatement(sql);
		this.rs = this.pstmt.executeQuery();
		ArrayList<BoardDTO> list = null;
		
		int seq;
		String title;
		String writer;
		Date writedate; //java.sql.Date
		int readed;
		BoardDTO dto = null;
		
		if(rs.next()) {
			list = new ArrayList<BoardDTO>();
			do {
				//글번호 글제목 작성자 작성일 조회수 만 뿌릴거다
				seq = rs.getInt("seq");
				title = rs.getString("title");
				writer = rs.getString("writer");
				writedate = rs.getDate("writedate");
				readed = rs.getInt("readed");
				
				dto = new BoardDTO();
				
				dto.setSeq(seq);
				dto.setTitle(title);
				dto.setWriter(writer);
				dto.setWritedate(writedate);
				dto.setReaded(readed);
				
				list.add(dto);
			}while(rs.next());
		}
		
		this.rs.close();
		this.pstmt.close();
		
		return list; //레코드가 없으면 0을 돌림
	}

	@Override
	public int insert(BoardDTO dto) throws SQLException {
		//				매개변수가 왜 BoradDTO야?
		//글쓰기 페이지에서 입력받은 값을 가지고 컨트롤러를 거쳐 BoardDTO dto객체를 만들것
		//그럼 모든 정보를 가진 dto객체가 컨트롤러에서 만들어져 그걸 서비스 계층으로 넘겨지고
		//실제 DAO 객체에까지 전달해짐 그래서 매개변수가 BoardDTO
		
		//=> 글쓰기 작업할때 모든 입력값을 dto객체로 만들어 DAO.insert()전달
		//왜이렇게 어렵게 만드냐 ? 나중을 위해서.. MVC패턴...
		
		String sql ="INSERT INTO TBL_CSTVSBOARD "
							+" (seq, writer, pwd, email, title, tag, content)"
							+" VALUES(SEQ_TBL_CSTVSBOARD.NEXTVAL, ?, ?, ?, ? , ? ,? )";
	
		this.pstmt = this.con.prepareStatement(sql);
		
		this.pstmt.setString(1, dto.getWriter());
		this.pstmt.setString(2, dto.getPwd());
		this.pstmt.setString(3, dto.getEmail());
		this.pstmt.setString(4, dto.getTitle());
		this.pstmt.setInt(5, dto.getTag());
		this.pstmt.setString(6, dto.getContent());
		//execute하기 전에 ?????? 해결
		int rowCount = this.pstmt.executeUpdate();
		
		this.pstmt.close();
		return rowCount;
	}

	@Override
	public void increaseReaded(int seq) throws SQLException {
		String sql = "UPDATE TBL_CSTVSBOARD "
							+" SET readed = readed+1"
							+" WHERE seq = ? ";
		
		this.pstmt = this.con.prepareStatement(sql);
		this.pstmt.setInt(1, seq);
		this.pstmt.executeUpdate(); //rowCount안써도 됨 (예외떻어지면 예외처리 바로 하니깐)
		this.pstmt.close();
	}

	@Override
	public BoardDTO view(int seq) throws SQLException {
		String sql = "SELECT seq, writer, title, content, readed, writedate "
							+" FROM TBL_CSTVSBOARD "
							+" WHERE seq = ? ";
		
		this.pstmt = this.con.prepareStatement(sql);
		this.pstmt.setInt(1, seq);
		
		this.rs = this.pstmt.executeQuery();
		
		BoardDTO dto = null;
		if(rs.next()) {
			dto = new BoardDTO();
			
			dto.setSeq(rs.getInt("seq"));
			dto.setWriter(rs.getString("writer"));
			dto.setTitle(rs.getString("title"));
			dto.setContent(rs.getString("content"));
			dto.setReaded(rs.getInt("readed"));
			dto.setWritedate(rs.getDate("writedate"));
		}
		
		this.rs.close();
		this.pstmt.close();
		
		return dto;
	}

}

4. 서비스를 담당하는 SERVICE 객체 생성 - BoardService

package days04.board;

import java.sql.SQLException;
import java.util.ArrayList;

public class BoardService {

	private BoardDAO dao = null;

	//1. 생성자 주입(DI) - DAO 객체
	public BoardService() {}
	public BoardService(BoardDAO dao) {
		this.dao = dao;
	}
	//2. setter 의존성 주입(DI)  생성자나 세터 둘중 하나만 하면 됨	
	//	public void setDao(BoardDAO dao) {
	//		this.dao = dao;
	//	}



	//게시글 쓰기 
	public int insertService(BoardDTO dto) {
		//컨트롤러 호출해서 서비스 호출해서 dao 에서 작업 ...
		//입력받은 정보가 BoardDTO에 담겨져서 서비스까지 넘어 온다

		//1) 로그기록
		//2) dao.insert()
		//3) 암호화
		//4) 작성자 포인트 1증가 
		//등 글쓰기 작업에 다른 작업이 붙을 수 있음

		//1. 로그기록
		System.out.println(">게시판 글쓰기 -> 로그 기록했다");
		//2. dao.insert() => DAO가 필요하다 => 위에가서 선언
		int rowCount = 0;
		try {
			rowCount = this.dao.insert(dto);
		} catch (SQLException e) {
			//e.printStackTrace();
			System.out.println("> BoardService.insertService() 테스트 실패!!!");
		}
		//4. 포인트
		System.out.println(">게시판 글쓰기 -> 암호화, 포인트 증가");

		//나중에 모든 작업들을 트랜잭션 처리를 할 것이다 (ACID) => 서비스 클래스에 한다.
		return rowCount;
	}


	//게시글 전체 목록 
	//=> 서비스는 모두 컨트롤러로 넘겨줄 거기 떄문에
	public ArrayList<BoardDTO> selectService(){
		ArrayList<BoardDTO> list = null;
		try {
			System.out.println("> 게시판 목록 -> 로그 기록했다.");
			list=  this.dao.select();//전체 게시글을 돌려줌, 얘 가보면 예외처리 떠넘기겠다고 되어 있어서 트라이 캐치해주기
		} catch (SQLException e) {
			e.printStackTrace();
		} 

		return list;
	}
	public BoardDTO viewService(int seq) {
		BoardDTO dto = null;
		//1. 조회수 1증가
		//2. dto 얻어오는 코딩 필요 => 2개 작업을 나중에 트랜잭션 처리

		try {
			this.dao.increaseReaded(seq);//1
			dto = this.dao.view(seq);//2
		} catch (SQLException e) {
			e.printStackTrace();
		} 


		return dto;
	}
	
	//selectService -> 매개변수2개
	public ArrayList<BoardDTO> selectService(int currentPage, int numberPerPage) {
		ArrayList<BoardDTO> list = null;

		try {
			System.out.println("> 게시판 목록 -> 로그 기록했다.");   
			list = this.dao.select(currentPage,numberPerPage);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list; 
	}
	//pagingService -> 매개변수3개
	public String pagingService(
			int currentPage
			, int numberPerPage
			, int numberOfPageBlock) {
		String pagingBlock = "\t\t ";
		int totalPages=0;
		int startOfPageBlock, endOfPageBlock;
		try {
			totalPages = this.dao.getTotalPages(numberPerPage); //이것도 여기서 클릭해서 만든 것

			//밑3줄은 try~catch 후 Ex02에서 복붙한거
			startOfPageBlock = (currentPage-1)/numberOfPageBlock*numberOfPageBlock+1;
			endOfPageBlock = startOfPageBlock+numberOfPageBlock-1;
			if(endOfPageBlock>totalPages) endOfPageBlock = totalPages;
			//복붙 후
			if(startOfPageBlock!=1) pagingBlock += " < ";
			for (int i = startOfPageBlock; i <=endOfPageBlock; i++) {
				pagingBlock += String.format(currentPage==i ? " [%d] ": " %d ", i);
			}
			if(endOfPageBlock!=totalPages) pagingBlock+=" > ";

		} catch (SQLException e) {
			e.printStackTrace();
		}
		//int numberOfPageBlock = 10;
		return pagingBlock;
	}
	
	//selectService -> 매개변수 4개
	public ArrayList<BoardDTO> selectService(
			int currentPage, int numberPerPage
			, int searchCondition, String searchWord) {
		//위에서 매개변수 2개짜리 메소드 내용 복붙
		ArrayList<BoardDTO> list = null;

		try {
			System.out.println("> 게시판 목록 -> 로그 기록했다.");   
			list = this.dao.select(
					currentPage,numberPerPage
					, searchCondition, searchWord ); //여기도 매개변수 두개 추가
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list; 
	}
	
	//pagingService -> 매개변수5개
	public String pagingService(
			int currentPage
			, int numberPerPage
			, int numberOfPageBlock
			, int searchCondition,
			String searchWord) {
		
		//위 pagingService 복사
		String pagingBlock = "\t ";
		int totalPages=0;
		int startOfPageBlock, endOfPageBlock;
		try {
			totalPages = this.dao.getTotalPages(numberPerPage
					,searchCondition, searchWord); //이거 두개 추가

			//밑3줄은 try~catch 후 Ex02에서 복붙한거
			startOfPageBlock = (currentPage-1)/numberOfPageBlock*numberOfPageBlock+1;
			endOfPageBlock = startOfPageBlock+numberOfPageBlock-1;
			if(endOfPageBlock>totalPages) endOfPageBlock = totalPages;
			//복붙 후
			if(startOfPageBlock!=1) pagingBlock += " < ";
			for (int i = startOfPageBlock; i <=endOfPageBlock; i++) {
				pagingBlock += String.format(currentPage==i ? " [%d] ": " %d ", i);
			}
			if(endOfPageBlock!=totalPages) pagingBlock+=" > ";

		} catch (SQLException e) {
			e.printStackTrace();
		}
		//int numberOfPageBlock = 10;
		return pagingBlock;
	}
	
	
	public int deleteService(int seq) {
		//실질 삭제 작업은 DAO가 하고
		//이 안에서는 로그기록, 다른일 둥등
		int rowCount=0;
		//System.out.println("> 게시판 목록 -> 로그 기록했다");
		try {
			rowCount=this.dao.delete(seq); //try~catch는 DAOImp까지 모두 작성 후 묶기로
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return rowCount;
	}
	
	
/*	public ArrayList<BoardDTO> selectService(
			int currentPage, int numberPerPage
			, int searchCondition, String searchWord) {
		//위에서 매개변수 2개짜리 메소드 내용 복붙
		ArrayList<BoardDTO> list = null;

		try {
			System.out.println("> 게시판 목록 -> 로그 기록했다.");   
			list = this.dao.select(
					currentPage,numberPerPage
					, searchCondition, searchWord ); //여기도 매개변수 두개 추가
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list; 
	}

*/
}

5. 모든 처리가 이루어지는 controller 생성 - BoardController

package days04.board;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

import com.util.DBConn;

public class BoardController {
	//원래는 아니지만 여기서 입력 처리 출력 다 한다
	//!!!!!!!!!!!!!컨트롤러에서 스캐너써서 입력받는다~!!!!!!!!!!!!!!!!!!
	
	//필드
	private int selectedNumber=0;	//선택된 변수 저장할 변수 선언
	private Scanner scanner =null;
	private BoardService service = null;
	
	
	//생성자
	public BoardController() {
		this.scanner = new Scanner(System.in);
	}
	
	//생성자를 통해 주입
	public BoardController(BoardService service) {
		this();
		this.service = service;
	}
	//setter를 통해서도 가능
	public void setService(BoardService service) {
		this.service = service;
	}
	
	public void start() {
		while(true) {
			메뉴출력();
			메뉴선택();
			메뉴처리();
		}
	}

	//Test 클래스    Controller								Service							DAO					ORACLE
	//main()  ->  컨트롤러.start()  -> 새글쓰기()  -> insertService(dto)  -> int insert(dto) -> 저장
	//이걸 나타낸 게 시퀀스 다이어그램 (어떤 객체에 어떤 메소드가 호출되어지는지 한눈에 알 수 있음)
	private void 메뉴처리() {
		switch (this.selectedNumber) {
		case 1: //새글
			새글쓰기();
			break;
		case 2: //목록
			목록보기();
			break;
		case 3: //목록
			상세보기();
			break;
		case 5: //목록
			삭제하기();
			break;
		case 6: //목록
			검색하기();
			break;
		case 7: //종료
			프로그램종료();
			break;

		default:
			break;
		}
		
	}

	private void 삭제하기() {
		System.out.print("> 삭제할 게시글의 번호(seq) 입력. "); //입력을 콤마로 나열할 수 있음
		int seq = this.scanner.nextInt();
		
		int rowCount = this.service.deleteService(seq); //삭제한 후에 영향받은 개수
		
		if(rowCount>=1) {
			System.out.printf("> (%s) 삭제 완료!!!\n", seq);
		}
		
		일시정지();
	}//삭제하기()

	private void 검색하기() {
		//제목(1) 내용(2) 작성자(3) 제목+내용(4)
		int searchCondition; //검색조건을 저장
		System.out.print("> 검색 조건 선택 : 제목(1) 내용(2) 작성자(3) 제목+내용(4) ");
		searchCondition = this.scanner.nextInt();
		
		this.scanner.skip("\r\n");
		System.out.print("> 검색어 입력. "); 
		String searchWord = this.scanner.nextLine(); //문자열 중간에 공백이 있으면 nextline으로 읽어야 함
		
		//목록보기 코딩 다 복사해오기 (나중에는 한개만 만들면 됨)
		System.out.print("> 현재 페이지 (currentPage) 번호 입력 ? ");
		this.currentPage = this.scanner.nextInt();
		
		
		
		ArrayList<BoardDTO> list = this.service.selectService(
				currentPage, numberPerPage
				,searchCondition, searchWord //얘네 두개 추가
				); 
		
		System.out.println("\t\t\t\t 게시판 ");
		System.out.println("--------------------------------------------------------------------------");
		System.out.printf("%s \t  %s \t %s \t\t %s \t\t %s \n"
										,"글번호","글제목","글쓴이","작성일","조회수");
		System.out.println("--------------------------------------------------------------------------");
		if(list==null) {
			System.out.println("검색결과 없음");
		}else {
			Iterator<BoardDTO> ir = list.iterator();
			while (ir.hasNext()) {
				BoardDTO dto = ir.next();
				System.out.printf("%d\t%-30s\t%s\t%s\t%d\n"
						,dto.getSeq(),dto.getTitle(),dto.getWriter(),dto.getWritedate(),dto.getReaded());

			}
			System.out.println("--------------------------------------------------------------------------");
			String pagingBlock = this.service.pagingService( 
					this.currentPage
					,this.numberPerPage
					,this.numberOfPageBlock
					,searchCondition //추가
					,searchWord//추가
					);
					
			System.out.println(pagingBlock);
		}//if
		
		
		
		System.out.println("--------------------------------------------------------------------------");
		일시정지();
		
	}//검색하기

	private void 상세보기() {
		//원래는 게시글(제목)을 클릭해서 이동해야하는데 우린 클릭 못하니까 입력받는걸로
		System.out.print("> 게시글 번호(seq) 입력. ");
		int seq = this.scanner.nextInt();
		//this.service.insertService(dto)//새글작성
		//this.service.selectService(); //보여주기
		//이 작업을 거꾸로 할 것
		//이태까지는 서비스 만들고 컨트롤러 호출 했는데
		//지금은 컨트롤러 -> 서비스 순서로 만들어가겠다
		BoardDTO dto = this.service.viewService(seq); //이거 코딩하고 viewService 클릭해서 보드 서비스에 자동으로 메소드만들기
		//seq -> dto 출력
		if(dto == null) {
			System.out.println(" 해당 게시글은 존재하지 않습니다. "); //ex) 보고있는데 삭제된 경우
			return;
		}
		//그렇지 않으면 해당 게시글 출력 
		System.out.println("ㄱ. 글번호 : "+seq);
		System.out.println("ㄴ. 작성자 : "+dto.getWriter());
		System.out.println("ㄷ. 조회수 : "+dto.getReaded());
		System.out.println("ㄹ. 글제목 : "+dto.getTitle());
		System.out.println("ㅁ. 글내용 : "+dto.getContent());
		System.out.println("ㅂ. 작성자 : "+dto.getWriter());
		
		System.out.println("\n [수정] [삭제] [목록]");
		
		일시정지();
	}
	//여기와서 수정 11/27
	private int currentPage = 1;
	private int numberPerPage=10; //15면 한 페이지에 15개씩 뿌리는 것 (게시글 개수)
	private int numberOfPageBlock = 10; //페이징 처리시 숫자 개수(블록개수) 1 2 3 4 5 ... 10 > 
	
	
	
	private void 목록보기() {
		System.out.print("> 현재 페이지 (currentPage) 번호 입력 ? ");
		this.currentPage = this.scanner.nextInt();
		
		
		//ArrayList<BoardDTO> list = this.service.selectService(); 이건 어제
		ArrayList<BoardDTO> list = this.service.selectService(currentPage, numberPerPage); //오늘 일케 바꿈
		
		
		//화면에 
		//원래는 뷰(View) - 출력담당에 넘겨줘서 출력해야하지만
		//지금은 아니고 그냥 출략
		System.out.println("\t\t\t 게시판 ");
		System.out.println("--------------------------------------------------------------------------");
		System.out.printf("%s\t%s\t%s\t%s\t%s\n"
										,"글번호","글제목","글쓴이","작성일","조회수");
		System.out.println("--------------------------------------------------------------------------");
		Iterator<BoardDTO> ir = list.iterator();
		while (ir.hasNext()) {
			BoardDTO dto = ir.next();
			System.out.printf("%d\t%-30s\t%s\t%s\t%d\n"
					,dto.getSeq(),dto.getTitle(),dto.getWriter(),dto.getWritedate(),dto.getReaded());

		}
		System.out.println("--------------------------------------------------------------------------");
		//System.out.println("\t\t\t [1] 2 3 4 5 6 7 8 9 10 >"); 페이징 블럭을 고정값으로 두지 말고 days05 -> days02 주자
		String pagingBlock = this.service.pagingService( //여기서 pagingService 클릭해서 생성하기
				this.currentPage
				,this.numberPerPage
				,this.numberOfPageBlock
				);
				
		System.out.println(pagingBlock);
		System.out.println("--------------------------------------------------------------------------");
		일시정지();
	}

	private void 프로그램종료() {
		DBConn.close();
		System.out.println("\t\t 프로그램 종료 ");
		System.exit(-1);
	}

	private void 새글쓰기() {
		System.out.println("> writer, pwd, email, title, tag, content 입력 ");
		String [] datas = this.scanner.next().split(",");
		
		BoardDTO dto = new BoardDTO();
		dto.setWriter( datas[0]);
		dto.setPwd(datas[1]);
		dto.setEmail(datas[2]);
		dto.setTitle(datas[3]);
		dto.setTag(Integer.parseInt(datas[4]));
		dto.setContent(datas[5]);
		
		int rowCount = this.service.insertService(dto);
		if(rowCount==1)
			System.out.println("> 새글 쓰기 완료!!! ");
		
		일시정지();
	}

	private void 일시정지() {
		System.out.println(" \t\t 계속하려면 엔터치세요. ");
		try {
			System.in.read();
			System.in.skip(System.in.available());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

	private void 메뉴선택() {
		System.out.print("> 메뉴를 선택하세요. ");
		this.selectedNumber = this.scanner.nextInt();
		//유효성검사 스킵
		
	}

	private void 메뉴출력() {
		String [] menus = {
				"새글", "목록", "보기", "수정", "삭제", "검색", "종료"
		};
		System.out.println("[ 메뉴 ]");
		for (int i = 0; i < menus.length; i++) {
			System.out.printf("%d. %s\t ",i+1, menus[i]);
		}
		System.out.println();
		
	}

}

6. main 메소드가 있는 클래스 생성

package days04.board;

import java.sql.Connection;

import com.util.DBConn;

public class BoardTest {
	
	public static void main(String[] args) {
		
		Connection con = DBConn.getConnection();
		BoardDAO dao = new BoardDAOImpl(con); //생성자DI
		BoardService service = new BoardService(dao ); //생성자DI
		BoardController controller = new BoardController(service); //생성자DI
		
		controller.start();// start 메소드로 프로그램 시작
		
		//배다연,1234,bae@iei.or,제목없음,0,내용없음
	}

}
//컨트롤키 눌러서 이동

 

반응형
Comments