[자바 JDBC 게시판] 5일차

김정현·2022년 8월 12일

JDBC게시판

목록 보기
4/9

1. 회원가입 구현 (아이디 중복체크 X)

		while (true) {
				System.out.printf("로그인 아이디 : ");
				loginId = sc.nextLine();
			if (loginId.trim().length() == 0) {
				System.out.println("아이디를 입력해주세요.");
				continue;
			}
			break;
		}
		while (true) {
			System.out.printf("로그인 패스워드 : ");
			loginPw = sc.nextLine();

			if (loginPw.trim().length() == 0) {
				System.out.println("패스워드를 입력해주세요.");
				continue;
			}
			boolean loginPwCheck = true;
			while (true) {
				System.out.printf("로그인 패스워드 확인 : ");
				loginPwConfirm = sc.nextLine();

				if (loginPwConfirm.trim().length() == 0) {
					System.out.println("패스워드 확인을 입력해주세요.");
					continue;
				}
				if (loginPw.equals(loginPwConfirm) == false) {
					System.out.println("패스워드가 일치 하지 않습니다. 
					다시 입력해주세요.");
					loginPwCheck = false;
				}
				break;
			}
			if (loginPwCheck) {
				break;
			}
		}
  • if (loginId.trim().length() == 0) , 아이디가 공백이면 다시 입력받도록 구현 비밀번호,

    비밀번호 확인도 마찬가지로 공백이면 continue 하여 각각 비밀번호와, 비밀번호 확인만 다시 입력받도록 구현

  • 공백만 아니라면 일단 패스워드,패스워드 확인을 받고 boolean loginPwCheck 의 값이 비밀번호와 비밀번호확인이 일치하지 않을때 false를 대입한다. loginPwCheck가 true 일때만 while문 종료하게 구현, loginPwCheckfalse이면 다시 비밀번호부터 다시 입력받도록 구현


2. 회원가입 구현(아이디 중복체크 O)

            SecSql sql = new SecSql();
			sql.append("SELECT COUNT(*) > 0");			
			sql.append(" FROM `member`");			
			sql.append(" WHERE loginId = ?", loginId);
			boolean isLoginIdDup = DBUtil.selectRowBooleanValue(conn, sql);
			
	if(isLoginIdDup) {
		System.out.printf("%s는(은) 이미 사용 중인 아이디가 있습니다.\n", loginId);
			continue;
			}
  • Boolean 에서 0은 false, 1은 true 이다.

  • SELECT COUNT(*) > 0 은 COUNT(*)이 0보다 크면 1 이고 , COUNT(*) 가 0보다 크지 않으면 0 이다.

  • DBUtil.selectRowBooleanValue(conn, sql)의 값이 1(true)이 나오면 사용중인 아이디가 있다는것.


3. MemberController 구현

  • App에 기능이 너무 커지므로 각각의 Controller컨트롤러로 이전해야한다.

  • App에서는 직접적인 기능을 수행 하면 안된다.

private int action(Connection conn, Scanner sc, String cmd) {
		MemberController memberController = new MemberController();
		memberController.setConn(conn);
		memberController.setSc(sc);	
		if (cmd.equals("exit")) {
			System.out.println("프로그램을 종료합니다");
			return -1;
		}
		if (cmd.equals("member join")) {
		memberController.doJoin();	
  • App에있던 회원가입 로직을 memberController.doJoin() 으로 이동시켰다.
public class MemberController {
		protected Connection conn;
		protected Scanner sc;
public void setConn(Connection conn) {
		this.conn = conn;
		}

public void setSc(Scanner sc) {
		this.sc = sc;
		}

public void doJoin() {~~~~~
   		 ~~~~~~~~~	
  • doJoin()메서드를 실행하려면 conn객체와 sc 스캐너가 필요하므로 setConn(Connection conn) , setSc(Scanner sc) 메소드를 이용하여 App의 conn과 sc를 넘겨줌

4. ArticleController 도입

if (cmd.equals("member join")) {
			memberController.doJoin();			
		} else if (cmd.equals("article write")) {
			articleController.doWrtie();			
		} else if (cmd.startsWith("article delete ")) {
			articleController.doDelete(cmd);	
		} else if (cmd.startsWith("article modify ")) {
			articleController.doModify(cmd);
		} else if (cmd.equals("article list")) {
			articleController.showList(cmd);			
		} else if (cmd.startsWith("article detail ")) {
			articleController.showDetail(cmd);				
		}else {
			System.out.println("존재하지 않는 명령어 입니다.");
		}
  • memberController로 이전과 같이 App에있는 로직을 ArticleController로 이전시킴
  • App의 소스코드가 간소화됨

하려는 게시판 구조

Main

↓↑

App

디스패처 서블릿

↓↑

각각의 컨트롤러 - 고객의 요청받고

↓↑

관련 서비스를 - 메인로직(판단)

↓↑

DAO

0개의 댓글