고급JAVA 19강 - DOC, MVC 패턴

Whatever·2021년 11월 23일
0

고급 JAVA

목록 보기
19/32

JAVA Doc 만드는 법

프로젝트에서 Exmport > javadoc검색 > next > Configure클릭해서 java1.7불러오기 > Javadoc Generation에서 "-charset UTF-8 -encoding UTF-8" 입력하고 finish

저장된 폴더에 가서 doc - index 열면 DOC적은 파일이 나온다.

/**
	 * 메서드명 : methodTest<br>
	 * 설 명 : 반환값이 없는 메서드<br>
	 * 
	 * @param a 첫번째 매개변수 (정수형)
	 * @param b 두번째 매개변수 (정수형)
	 */

MVC (Model, View, Controller) 패턴

Model = data(데이터를 만들어내는 과정도 포함)
View = Model(data)을 보여주는 것
Controller = Model과 View의 중간다리 역할, 사용자의 요청을 수행

MVC패턴을 만든 이유 :
디자이너와 프로그래머의 일을 나누기 위해

-MVC패턴의 비지니스로직을 처리하는 클래스와 역할들...
1) VO, DTO ==> 데이터를 저장하는 역할만 하는 클래스
(VO : Value Object, DTO : Data Transfer Object)
2) DAO ==> SQL문을 DB서버에 보내서 실행한 결과를 얻어오는 역할을 수행하는 클래스
(Data Access Object)
3) Service ==> 일을 수행하는 중간 관리자 역할을 수행하는 클래스
DAO에 작성된 메서드를 원하는 작업에 맞게 호출하여 결과를 받아오고
받아온 자료를 Controller에 전달해주는 역할을 수행한다.
4) Controller ==> 비지니스 로직이 시작되는 곳으로 사용자의 요청에 맞는 일을
Service에게 시키고, Service가 보내온 처리 결과를 View에 보내어 화면에 반영
되도록하는 역할을 수행한다.

Controller ---> Service ---> DAO ---> DB서버
             <---           <---         <---

각 제어 흐름 중에 사용되는 데이터는 보통 VO객체이거나 Collection객체에 담아서 보낸다.
VO, DAO, Service, Controller순으로 만드는 것이 좋다.

MymemberVO
DB테이블에 있는 각 컬럼들을 기준으로 데이터를 객체화할 클래스이다.
DB테이블의 '컬럼명'이 이 VO클래스의 '멤버변수'가 된다.
DB테이블의 컬럼과 클래스의 멤버변수를 매핑해서 사용한다.

DB작업시 필요한 데이터가 있는지 없는지

레코드가 여러개일 때 : List
하나일 때 : VO 반환

Interface를 만드는 이유
: 표준을 정하기 위해서 Interface
DB가 바뀌었을 때를 대비해 각각의 DBsystem(oracle, mysql등)에 맞는
DaoImpl객체를 만들어 각각의 DB에 적용하기 위해서

MemberVO

/*
 	DB테이블에 있는 각 컬럼들을 기준으로 데이터를 객체화할 클래스이다.
 	
 	DB테이블의 '컬럼명'이 이 VO클래스의 '멤버변수'가 된다.
 	
 	DB테이블의 컬럼과 클래스의 멤버변수를 매핑해서 사용한다.
 */
public class MemberVO {

	private String mem_id; 
	private String mem_name; 
	private String mem_pass; 
	private String mem_tel; 
	private String mem_addr;
	
	// VO클래스에 별도의 생성자를 만들었을 때는 반드시 기본 생성자도 같이 만들어야 한다.
	
	public String getMem_id() {
		return mem_id;
	}
	public void setMem_id(String mem_id) {
		this.mem_id = mem_id;
	}
	public String getMem_name() {
		return mem_name;
	}
	public void setMem_name(String mem_name) {
		this.mem_name = mem_name;
	}
	public String getMem_pass() {
		return mem_pass;
	}
	public void setMem_pass(String mem_pass) {
		this.mem_pass = mem_pass;
	}
	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;
	}
	
	
}

IMemberDao

/**
 * 실제 DB서버에 연결해서 SQL문을 수행하여 결과를 작성해서 
 * Service에 전달하는 DAO의 interface
 * 
 * @author PC-05
 *
 */
public interface IMemberDao {
	
	/**
	 * MemberVO에 담겨진 자료를 DB에 insert하는 메서드
	 * 
	 * @param memvo DB에 insert할 자료가 저장된 MemberVO객체
	 * @return insert작업성공 : 1이상의 정수, insert작업실패 : 0
	 */
	public int insertMember(MemberVO memvo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * @param memId 삭제할 회원 ID
	 * @return 삭제성공 : 1, 삭제실패 : 0
	 */
	public int deleteMember(String memId);
	
	/**
	 * MemberVO자료를 이용하여 회원 정보를 Update하는 메서드 
	 * @param memvo update할 회원 정보가 저장된 MemberVO객체
	 * @return 수정성공 : 1, 수정실패 : 0
	 */
	public int updateMember(MemberVO memvo);

	/**
	 * DB의 회원 테이블의 전체 레코드를 가져와서 
	 * List에 담아서 반환하는 메서드
	 * 
	 * @return MemberVO객체를 담고있는 List
	 */
	public List<MemberVO> getAllMember();
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원데이터의 개수를 반환하는 메서드
	 * 
	 * @param memId 검색할 회원ID
	 * @return 검색된 회원ID 개수
	 */
	public int getMemberCount(String memId);
	
}

IMemberService

/**
 * Service객체는 DAO에 만들어진 메서드를 원하는 작업에 맞게 호출하여 
 * 그 결과를 받아서 Controller에게 보내주는 역할을 한다.
 * 
 * @author PC-05
 *
 */
public interface IMemberService {
	
	/**
	 * MemberVO에 담겨진 자료를 DB에 insert하는 메서드
	 * 
	 * @param memvo DB에 insert할 자료가 저장된 MemberVO객체
	 * @return insert작업성공 : 1이상의 정수, insert작업실패 : 0
	 */
	public int insertMember(MemberVO memvo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * @param memId 삭제할 회원 ID
	 * @return 삭제성공 : 1, 삭제실패 : 0
	 */
	public int deleteMember(String memId);
	
	/**
	 * MemberVO자료를 이용하여 회원 정보를 Update하는 메서드 
	 * @param memvo update할 회원 정보가 저장된 MemberVO객체
	 * @return 수정성공 : 1, 수정실패 : 0
	 */
	public int updateMember(MemberVO memvo);

	/**
	 * DB의 회원 테이블의 전체 레코드를 가져와서 
	 * List에 담아서 반환하는 메서드
	 * 
	 * @return MemberVO객체를 담고있는 List
	 */
	public List<MemberVO> getAllMember();
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원데이터의 개수를 반환하는 메서드
	 * 
	 * @param memId 검색할 회원ID
	 * @return 검색된 회원ID 개수
	 */
	public int getMemberCount(String memId);
	
}

MemberDaoImpl

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_name, mem_pass,mem_tel, mem_addr)"
					+ " values(?,?,?,?,?)";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memvo.getMem_id());
			pstmt.setString(2, memvo.getMem_name());
			pstmt.setString(3, memvo.getMem_pass());
			pstmt.setString(4, memvo.getMem_tel());
			pstmt.setString(5, memvo.getMem_addr());
			
			cnt = pstmt.executeUpdate();
		} catch (SQLException e) {
			cnt = 0;
			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 mymember where mem_id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);
			
			cnt = pstmt.executeUpdate();
		} catch (SQLException e) {
			cnt = 0;
			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_NAME =?, MEM_PASS =?, MEM_TEL=?, MEM_ADDR=? where MEM_ID=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memvo.getMem_name());
			pstmt.setString(2, memvo.getMem_pass());
			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();
			cnt = 0;
		}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() {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		List<MemberVO> memList = new ArrayList<>(); //반환값이 저장될 변수 선언
		
		try {
			conn = DBUtil3.getConnection();
			
			String sql = "select * from mymember";
			
			stmt = conn.createStatement();
			
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				// 반복처리 부분에서는 한 레코드의 데이터를 VO에 담고 
				// 데이터가 저장된 VO를 List에 추가하는 작업을 진행한다.
				
				// 1개의 레코드 값들을 VO에 저장하기
				MemberVO memVo = new MemberVO(); // VO 객체 생성
				memVo.setMem_id(rs.getString("mem_id")); // VO에 데이터베이스에서 불러온 데이터를 저장
				memVo.setMem_name(rs.getString("mem_name"));
				memVo.setMem_pass(rs.getString("mem_pass"));
				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) {
			count = 0;
			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 0;
	}

}

MemberServiceImpl

public class MemberServiceImpl implements IMemberService {
	private IMemberDao dao; // DAO 객체의 참조값이 저장될 변수 선언
	
	public MemberServiceImpl() {
		dao = new MemberDaoImpl(); // DAO객체 생성
	}
	
	@Override
	public int insertMember(MemberVO memvo) {
		// TODO Auto-generated method stub
		return dao.insertMember(memvo);
	}

	@Override
	public int deleteMember(String memId) {
		// TODO Auto-generated method stub
		return dao.deleteMember(memId);
	}

	@Override
	public int updateMember(MemberVO memvo) {
		// TODO Auto-generated method stub
		return dao.updateMember(memvo);
	}

	@Override
	public List<MemberVO> getAllMember() {
		// TODO Auto-generated method stub
		return dao.getAllMember();
	}

	@Override
	public int getMemberCount(String memId) {
		// TODO Auto-generated method stub
		return dao.getMemberCount(memId);
	}

}

MemberController

public class MemberController {
	private Scanner scan;
	private IMemberService service; // service 객체 변수 선언
	
	public MemberController() {
		scan = new Scanner(System.in);
		service = new MemberServiceImpl();
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	
	// 메뉴를 출력하고  
	private int displayMenu() {

		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("선택 >");
		
		int input = scan.nextInt();
		return input;
	}
	
	public void memberStart() {
		while(true){
			int choice = displayMenu();
			switch(choice){
				case 1 :	// 추가 
					insertMember(); break;
				case 2 : 	// 삭제
					deleteMember(); break;
				case 3 : 	// 수정  ==> 전체 항목 수정
					updateMember(); break;
				case 4 : 	// 전체 자료 출력
					displayMember(); break;
				case 5 : 	// 수정	==> 원하는 항목만 수정
					//updateMember2(); break;
				case 0 : 	// 종료
					System.out.println("작업을 마칩니다.");
					return;
				default : 
					System.out.println("번호를 잘못 입력했습니다. 다시입력하세요.");
			}
		}
	}
	
	private void displayMember() {
		System.out.println();
		System.out.println("===============================================");
		System.out.println(" 회원ID   회원이름  비밀번호   전화번호    주 소");
		System.out.println("===============================================");
		
		List<MemberVO> list = service.getAllMember();
		for(MemberVO memVo : list) {
			System.out.println(memVo.getMem_id() + "\t"
					+ memVo.getMem_name() + "\t"
					+ memVo.getMem_pass() + "\t"
					+ memVo.getMem_tel() + "\t"
					+ memVo.getMem_addr() + "\t");
		}
	}

	private void updateMember() {
		System.out.println();
		System.out.println("수정할 회원 정보를 입력하세요.");
		System.out.print("수정할 회원ID >> ");
		String memId = scan.next();
		
		int count = service.getMemberCount(memId);
		if(count==0){ // 없는 회원이면...
			System.out.println(memId + "은(는) 없는 회원ID입니다.");
			System.out.println("수정 작업을 중단합니다.");
			return;
		}
		
		System.out.println();
		System.out.println("수정할 내용을 입력하세요.");
		System.out.print("새로운 회원이름 >> ");
		String memName = scan.next();
		
		System.out.print("새로운 비밀번호 >> ");
		String memPass = scan.next();
		
		System.out.print("새로운 전화번호 >> ");
		String memTel = scan.next();
		
		scan.nextLine();
		System.out.print("새로운 회원주소 >> ");
		String memAddr = scan.nextLine();
		
		MemberVO memVo = new MemberVO();
		memVo.setMem_id(memId);
		memVo.setMem_name(memName);
		memVo.setMem_pass(memPass);
		memVo.setMem_tel(memTel);
		memVo.setMem_addr(memAddr);
		
		int cnt = service.updateMember(memVo);
		
	}

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

	private void insertMember(){

		System.out.println();
		System.out.println("추가할 회원 정보를 입력하세요.");
		
		int count = 0;
		String memId = null;  // 회원ID가 저장될 변수
		do{
			System.out.print("회원ID >> ");
			memId = scan.next();
			count = service.getMemberCount(memId);
			if(count>0){
				System.out.println(memId + "은(는) 이미 등록된 회원ID입니다.");
				System.out.println("다른 회원ID를 입력하세요.");
			}
			
		}while(count>0);
		
		System.out.print("회원이름 >> ");
		String memName = scan.next();
		
		System.out.print("비밀번호 >> ");
		String memPass = scan.next();
		
		System.out.print("전화번호 >> ");
		String memTel = scan.next();
		
		scan.nextLine();  // 입력 버퍼 비우기
		System.out.print("회원주소 >> ");
		String memAddr = scan.nextLine();
		
		//입력한 데이터들을 VO객체에 저장한다.
		MemberVO memVo = new MemberVO();
		memVo.setMem_id(memId);
		memVo.setMem_name(memName);
		memVo.setMem_pass(memPass);
		memVo.setMem_tel(memTel);
		memVo.setMem_addr(memAddr);
		
		int cnt = service.insertMember(memVo);
		
			if( cnt>0 ){
				System.out.println("회원 정보 추가 성공!!!");
			}else{
				System.out.println("회원 정보 추가 실패~~~");
			}
	}
	

}

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN