상세 컨텐츠

본문 제목

고급 자바_0111-1

자바

by 정재화니 2023. 1. 11. 12:51

본문

MVC패턴을 이용해서 지난번에 만들었던 멤버관리프로그램에 적용 시켜 보겠습니다.

 

1. VO패키지를 만들고 MemberVo 클래스를 작성합니다.

package kr.or.ddit.mvc.vo;
/*
 	- DB 테이블에 있는 컬럼을 기준으로 데이터를 객체화한 클래스 
 	
 	- DB 테이블의 '컬럼명'이 클래스의 '멤버변수명'이 된다.
 	- DB 테이블의 컬럼과 클래스의 멤버변수를 매핑하는 역할을 한다.(넣어주는 역할, 전달해주는 역할)
 	
 */
public class MemberVo {
	private String mem_id;
	private String mem_pass;
	private String mem_name;
	private String mem_tel;
	private String mem_addr;
	
	
	
	public String getMem_id() {
		return mem_id;
	}
	public void setMem_id(String mem_id) {
		this.mem_id = mem_id;
	}
	public String getMem_pass() {
		return mem_pass;
	}
	public void setMem_pass(String mem_pass) {
		this.mem_pass = mem_pass;
	}
	public String getMem_name() {
		return mem_name;
	}
	public void setMem_name(String mem_name) {
		this.mem_name = mem_name;
	}
	public String getMem_tel() {
		return mem_tel;
	}
	public void setMem_tel(String mem_tel) {
		this.mem_tel = mem_tel;
	}
	public String getMem_addr() {
		return mem_addr;
	}
	public void setMem_addr(String mem_addr) {
		this.mem_addr = mem_addr;
	}
	
	
}

2. DAO 패키지를 만들고 DAO인터페이스를 작성합니다.

 

package kr.or.ddit.mvc.dao;

import java.util.List;

import kr.or.ddit.mvc.vo.MemberVo;

/**
 * 실제 DB와 연결해서 SQL문을 실행하여 결과를 작성해서 Service에게 전달하는 DAO의 interface
 * 
 * 메서드 하나가 DB와 관련된 작업 1개를 수행하도록 작성한다.
 * 
 * @author MASTER
 *
 */
public interface IMemberDao {
	/**
	 * MemberVo에 담겨진 데이터를 DB에 insert하는 메서드 
	 * 
	 * @param memVo DB에 insert할 자료가 저장된 MemberVo객체
	 * @return 작업 성공 : 1, 작업 실패: 0 
	 */
	public int insertMember(MemberVo memVo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * 
	 * @param memId 삭제할 회원ID
	 * @return 작업 성공 : 1, 작업 실패: 0
	 */
	public int deleteMember(String memId); //매개변수가 한개가 되도록, 두개이상이면 묶어서
	
	/**
	 * MemberVo의 자료를 이용하여 DB의 자료를 update하는 메서드
	 * 
	 * @param memVo update할 회원 정보가 저장된 MemberVo객체
	 * @return 작업성공 : 1, 작업 실패: 0
	 */
	public int updateMember(MemberVo memVo);
	
	/**
	 * DB의 전체 회원정보를 가져와 List에 담아서 반환하는 메서드
	 * 
	 * @return MemberVo객체가 저장된 List객체
	 */
	public List<MemberVo> getAllMember();
	
	/**
	 * 회원Id를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
	 * @param memId 검색할 회원ID
	 * @return 검색된 회원ID의 갯수
	 */
	public int getMemberCount(String memId);
	
	
	
}

 

3.Service 패키지를 만들고 인터페이스를 작성합니다.

package kr.or.ddit.mvc.service;

import java.util.List;

import kr.or.ddit.mvc.vo.MemberVo;

/**
 * Service객체는 DAO에 설정된 메서드를 원하는 작업에 맞게 호출하여 그 결과를 받아오고,
 * 받아온 결과를 Controller에게 보내주는 역할을 한다.
 * 
 * 보통은 DAO의 메서드 구조와 같게 만든다. (자바 고급 시간에 한해서...)
 * @author MASTER
 *
 */
public interface IMemberService {
	/**
	 * MemberVo에 담겨진 데이터를 DB에 insert하는 메서드 
	 * 
	 * @param memVo DB에 insert할 자료가 저장된 MemberVo객체
	 * @return 작업 성공 : 1, 작업 실패: 0 
	 */
	public int insertMember(MemberVo memVo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * 
	 * @param memId 삭제할 회원ID
	 * @return 작업 성공 : 1, 작업 실패: 0
	 */
	public int deleteMember(String memId); //매개변수가 한개가 되도록, 두개이상이면 묶어서
	
	/**
	 * MemberVo의 자료를 이용하여 DB의 자료를 update하는 메서드
	 * 
	 * @param memVo update할 회원 정보가 저장된 MemberVo객체
	 * @return 작업성공 : 1, 작업 실패: 0
	 */
	public int updateMember(MemberVo memVo);
	
	/**
	 * DB의 전체 회원정보를 가져와 List에 담아서 반환하는 메서드
	 * 
	 * @return MemberVo객체가 저장된 List객체
	 */
	public List<MemberVo> getAllMember();
	
	/**
	 * 회원Id를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
	 * @param memId 검색할 회원ID
	 * @return 검색된 회원ID의 갯수
	 */
	public int getMemberCount(String memId);
	
	
}

 

4 DAO 패키지에 DAO클래스

package kr.or.ddit.mvc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import kr.or.ddit.mvc.vo.MemberVo;
import kr.or.ddit.util.DBUtil;
import kr.or.ddit.util.DBUtil3;

public class MemberDaoImpl implements IMemberDao {

	@Override
	public int insertMember(MemberVo memVo) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0;		// 반환값이 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			String sql = "insert into mymember (mem_id, mem_pass, mem_name, mem_tel, mem_addr) "
					+ " values(?, ?, ?, ?, ?) ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memVo.getMem_id());
			pstmt.setString(2, memVo.getMem_pass());
			pstmt.setString(3, memVo.getMem_name());
			pstmt.setString(4, memVo.getMem_tel());
			pstmt.setString(5, memVo.getMem_addr());
			
			cnt = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(pstmt != null) try { pstmt.close(); }catch(SQLException e) {}
			if(conn != null) try { conn.close(); }catch(SQLException e) {}
		}
		
		return cnt;
	}

	@Override
	public int deleteMember(String memId) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0;
		
		try {
			conn = DBUtil3.getConnection();
			String sql = "delete from mymember where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);
			
			cnt = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(pstmt != null) try { pstmt.close(); }catch(SQLException e) {}
			if(conn != null) try { conn.close(); }catch(SQLException e) {}
		}
		
		
		return cnt;
	}

	@Override
	public int updateMember(MemberVo memVo) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0;
		try {
			conn = DBUtil3.getConnection();
			String sql = "update mymember set mem_pass = ?, mem_name = ?, "
		               + " mem_tel = ?, mem_addr = ? where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memVo.getMem_pass());
			pstmt.setString(2, memVo.getMem_name());
			pstmt.setString(3, memVo.getMem_tel());
			pstmt.setString(4, memVo.getMem_addr());
			pstmt.setString(5, memVo.getMem_id());
			
			cnt = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(pstmt != null) try { pstmt.close(); }catch(SQLException e) {}
			if(conn != null) try { conn.close(); }catch(SQLException e) {}
		}
		
		
		return cnt;
	}

	@Override
	public List<MemberVo> getAllMember() {
		List<MemberVo> memList = null;
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			conn = DBUtil3.getConnection();
			String sql = "select * from mymember";
			stmt = conn.createStatement();
			
			rs = stmt.executeQuery(sql);
			memList = new ArrayList<MemberVo>();
			
			while(rs.next()) {
				// 1개의 레코드 결과를 VO객체에 담는다.
				MemberVo memVo = new MemberVo();
				memVo.setMem_id(rs.getString("mem_id"));
				memVo.setMem_pass(rs.getString("mem_pass"));
				memVo.setMem_name(rs.getString("mem_name"));
				memVo.setMem_tel(rs.getString("mem_tel"));
				memVo.setMem_addr(rs.getString("mem_addr"));
				
				memList.add(memVo);	// VO객체를 List에 추가
				
			}
			
		} catch (SQLException e) {
			memList = null;
			e.printStackTrace();
		}finally {
			if(rs != null) try { rs.close(); }catch(SQLException e) {}
			if(stmt != null) try { stmt.close(); }catch(SQLException e) {}
			if(conn != null) try { conn.close(); }catch(SQLException e) {}
		}
				
		return memList;
	}

	@Override
	public int getMemberCount(String memId) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		int count = 0;
		
		try {
			conn =DBUtil3.getConnection();
			String sql = "select count(*) cnt from mymember where mem_id = ?";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);
			
			rs = pstmt.executeQuery();
			if(rs.next()) {
				count = rs.getInt("cnt");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(rs != null) try { rs.close(); }catch(SQLException e) {}
			if(pstmt != null) try { pstmt.close(); }catch(SQLException e) {}
			if(conn != null) try { conn.close(); }catch(SQLException e) {}
		}
		
		
		return count;
	}

}

 

5. Service패키지에 Service클래스를 작성합니다.

package kr.or.ddit.mvc.service;

import java.util.List;

import kr.or.ddit.mvc.dao.IMemberDao;
import kr.or.ddit.mvc.dao.MemberDaoImpl;
import kr.or.ddit.mvc.vo.MemberVo;

public class MemberServiceImpl implements IMemberService {
	
	private IMemberDao dao;
	
	public MemberServiceImpl() {
		dao = new MemberDaoImpl();	// DAO객체를 생성해서 dao객체변수를 초기화한다.
	}

	@Override
	public int insertMember(MemberVo memVo) {
		return dao.insertMember(memVo);
	}

	@Override
	public int deleteMember(String memId) {
		return dao.deleteMember(memId);
	}

	@Override
	public int updateMember(MemberVo memVo) {
		return dao.updateMember(memVo);
	}

	@Override
	public List<MemberVo> getAllMember() {
		return dao.getAllMember();
	}

	@Override
	public int getMemberCount(String memId) {
		return dao.getMemberCount(memId);
	}

}

 

6. Controller 패키지를 만들고 Controller

package kr.or.ddit.mvc.controller;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.List;
import java.util.Scanner;

import kr.or.ddit.mvc.dao.MemberDaoImpl;
import kr.or.ddit.mvc.service.IMemberService;
import kr.or.ddit.mvc.service.MemberServiceImpl;
import kr.or.ddit.mvc.vo.MemberVo;

public class MemberController {
	private Scanner sc;
	private IMemberService service;		// Service객체가 저장될 변수 선언
	
	// 생성자
	public MemberController() {
		sc = new Scanner(System.in);
		service = new MemberServiceImpl();
	}
	
	public static void main(String[] args) {
		new MemberController().startMember();
		
	}
	//시작 메서드
	 public void startMember() {
	      System.out.println();
	      System.out.println("*************************************");
	      System.out.println("회   원   관   리   프   로  그   램");
	      System.out.println("*************************************");
	      System.out.println();
	      
	      while(true) {
	         int choice = displayMenu();
	         switch(choice){
	            case 1 :      // 자료 추가 
	               insertMember(); break;
	            case 2 :       // 자료 삭제
	               deleteMember(); break;
	            case 3 :       // 자료 수정
	               updateMember(); break;
	            case 4 :       // 전체 자료 출력
	               displayAllMember(); break;
	            case 5 :       // 자료 수정2
//	               updateMember2(); break;               
	            case 0 :       // 프로그램 종료
	               System.out.println("작업을 마칩니다");
	               return;
	            default :
	               System.out.println("작업 번호를 잘못 입력했습니다. 다시 입력하세요...");
	         }
	      }
	   }
	
	private void displayAllMember() {
		System.out.println();
        System.out.println("-----------------------------------------------------------");
        System.out.println(" 회원ID    비밀번호     회원이름    전화번호      회원주소");
        System.out.println("-----------------------------------------------------------");
		
        
        List<MemberVo> list = service.getAllMember();
//        for(int i = 0; i < list.size(); i++	) {
//            String id = list.get(i).getMem_id();			//memVo.getMem_id();
//            String pass = list.get(i).getMem_pass();
//            String name = list.get(i).getMem_name();
//            String tel = list.get(i).getMem_tel();
//            String addr = list.get(i).getMem_addr();
//            
//            System.out.println(id + "\t" + pass + "\t" + name + "\t" + tel + "\t" + addr);
            
        // 이중포문 사용
        if(list ==null || list.size() ==0) {
        	System.out.println("정보가 하나도 없습니다.");
        }else {
        	for(MemberVo memVo : list) {
        		System.out.println(memVo.getMem_id() + "\t"
        			+ memVo.getMem_pass() + "\t"
        			+ memVo.getMem_name() + "\t"
        			+ memVo.getMem_tel() + "\t"
        			+ memVo.getMem_addr() + "\t");
        	}
        }
            
         }
        
	private void updateMember() {
		System.out.println();
	      System.out.println("수정할 회원 정보를 입력하세요...");
	      
	      System.out.print("회원ID >> ");
	      String id = sc.next();
	      
	      int count = service.getMemberCount(id);
	      
	      if(count==0) {  // 없는 회원이면...
	         System.out.println(id + "은(는) 등록되지 않은 회원ID 입니다.");
	         System.out.println("수정 작업을 마칩니다...");
	         return;
	      }
	      
	      System.out.println("수정할 내용을 입력하세요...");
	      System.out.print("새로운 비밀번호 >> ");
	      String newPass = sc.next();
	      
	      System.out.print("새로운 회원이름 >> ");
	      String newName = sc.next();
	      
	      System.out.print("새로운 전화번호 >> ");
	      String newTel = sc.next();
	      
	      sc.nextLine();
	      System.out.print("새로운 회원주소 >> ");
	      String newAddr = sc.nextLine();
	      
	      MemberVo memVo = new MemberVo();
	      memVo.setMem_id(id);
	      memVo.setMem_pass(newPass);
	      memVo.setMem_name(newName);
	      memVo.setMem_tel(newTel);
	      memVo.setMem_addr(newAddr);
	      
	      int cnt = service.updateMember(memVo);
	         
	         if(cnt>0){
	            System.out.println("수정 작업 성공!!!");
	         }else {
	            System.out.println("수정 작업 실패~~~");
	         }
		
	}

	private void deleteMember() {
		 System.out.println();
	      System.out.println("삭제할 회원 정보를 입력하세요...");
	      System.out.print("회원ID >> ");
	      String id = sc.next();
	      
	      
	      MemberVo memVo = new MemberVo();
	      memVo.setMem_id(id);
	      
	      int cnt = service.deleteMember(id);
	      
	      if(cnt>0) {
	            System.out.println("회원ID가 " + id + "인 회원 정보 삭제 성공!!");
	         }else {
	            System.out.println("회원ID가 " + id + "인 회원은 없는 회원이거나 삭제에 실패했습니다...");
	         }
		
		
	}

	private void insertMember() {
		 Connection conn = null;
	      PreparedStatement pstmt = null;
	      
	      System.out.println();
	      System.out.println("추가할 회원 정보를 입력하세요...");
	      int count = 0;      // 회원ID의 개수가 저장될 변수
	      String id = null;   // 입력한 회원ID가 저장될 변수
	      
	      do {
	         System.out.print("회원ID >> ");
	         id = sc.next();
	         count = service.getMemberCount(id);
	         if(count>0) {
	            System.out.println("입력한 " + id + "은(는) 이미 등록된 회원ID입니다.");
	            System.out.println("다른 회원ID를 입력하세요...");
	            System.out.println();
	         }
	         
	      }while(count>0);
	      
	      System.out.print("비밀번호 >> ");
	      String pass = sc.next();
	      
	      System.out.print("회원이름 >> ");
	      String name = sc.next();
	      
	      System.out.print("전화번호 >> ");
	      String tel = sc.next();
	      
	      sc.nextLine();   // 입력 버퍼 비우기...
	      System.out.print("회원주소 >> ");
	      String addr = sc.nextLine();
	      
	      // 입력한 데이터들을 VO객체에 담는다.
	      MemberVo memVo = new MemberVo();
	      memVo.setMem_id(id);
	      memVo.setMem_pass(pass);
	      memVo.setMem_name(name);
	      memVo.setMem_tel(tel);
	      memVo.setMem_addr(addr);
	      
	      int cnt = service.insertMember(memVo);
	      
	      if(cnt > 0) {
	    	  System.out.println("등록 작업 성공 ! ! ! ");
	      }else {
	    	  System.out.println("등록 작업 실패 ~ ~ ~");
	      }
	      
		
	}

	// 메뉴를 출력하고 작업번호를 입력 받아 반화하는 메서드
	   private int displayMenu() {
	      System.out.println();
	      System.out.println("----------------");
	      System.out.println("1. 자료 추가   ");
	      System.out.println("2. 자료 삭제   ");
	      System.out.println("3. 자료 수정   ");
	      System.out.println("4. 전체 자료 출력");
	      System.out.println("5. 자료 수정2   ");
	      System.out.println("0. 프로그램 종료.");
	      System.out.println("----------------");
	      System.out.print("작업 선택 >> ");
	      return sc.nextInt();
	   }
	 
}

 

'자바' 카테고리의 다른 글

고급 자바_0117-1  (0) 2023.01.17
고급 자바_0110-1  (1) 2023.01.11
고급 자바_0109-1  (0) 2023.01.09
고급 자바_0106-1  (0) 2023.01.06
고급 자바_0105-1  (0) 2023.01.05

관련글 더보기