728x90
▶MVC(Model, View, Controller)
- Model : DB처리를 위한 data(좁은의미),
data를 구성하기 위한 프로그램까지 포함/Service, DAO 포함(넓은의미)
=>model2, model1은 존재하지 않으며, MVC패턴 이전의 방법을 지칭
- View : model을 사용자가 원하는 모습으로 보여줌 ,출력 또는 응답페이지.
- Controller : Model과 View 사이에 있는 컴포넌트. Model이 데이터를 어떻게 처리할지 알려주는 역할로 사용자의 요청을 받아서 처리하는 부분.
▶MVC패턴의 로직을 처리하는 클래스들
VO, DTO ==> 데이터를 저장하는 역할만 하는 클래스
- VO : Value Object :데이터를 저장하고 사용할 수 있게함.
- DTO : Data Transfer Object : 컨트롤러가 일을 받아서 시킬 때, 필요한 정보를 담아서 넘겨줌
==> 보통 DB테이블에서 1개의 레코드를 저장할 클래스를 지칭. 따로 구분없이 쓰이는 듯함.
- DAO ==> SQL문을 DB서버에 보내서 결과를 얻어오는 역할을 수행하는 클래스
(DAO : Data Access Object)
- Service ==>일을 수행하는 중간 관리자와 같은 역할을 수행하는 클래스(안쓰는 곳도 있음)
Service는 일( 1. 일반 비즈니스 로직 - DB접근이 필요없는 일반처리
2. DB를 필요로 하는 처리)이 있으면 그 일에 필요한 DAO를 호출해서 일을 처리한 후
처리결과를 Controller에게 전달.
Controller ==> 비지니스 로직이 시작되는 곳으로 사용자의 요청에 맞는 일을
Service에게 시키고, Service가 보내온 처리결과를 화면 등에
반영시키는 역할 수행.
Controller --> Service --> DAO --> DB서버 <요청순선>
<--Controller <--Service <--DAO <--DB서버<반환순서>
각 단계에서 전달되는 데이터는 VO나 Collection객체에 담아서 보냄
a-->b : a가 b메소드 호출(매개변수에 담아서 전달)
<-- : 반환값을 전달
예제)
1. 자바프로젝트 생성 후 소스폴더 추가하기
2. 소스폴더에 config 프로젝트 생성
2-1. config에 JDBC에 필요한 정보가 들어 있는 text파일생성
#dbinfo.properties
# 이 줄은 주석 처리 줄입니다...
# Properties문서를 작성하는 방법
# 'key값 = value값' 같은 형식으로 작성
# 공백주의하기
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=ddit
pass=java
2-2. .DBUtil 프로젝트 및 클래스 생성
package kr.or.ddit.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
//dbinfo.properties 파일의 내용을 이용하여 셋팅하는 방법
//방법1) Properties객체 이용
public class DBUtil2 {
static Properties prop; //Properties객체 변수 선언
//static초기화블럭
static{
prop= new Properties(); //Properties객체 생성
File f = new File("res/kr/or/ddit/config/dbinfo.properties");
FileInputStream fin = null;
try {
fin = new FileInputStream(f); //입력스트림 객체생성
prop.load(fin); //파일을 읽어서 Properties객체에 추가
//Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName(prop.getProperty("driver"));
} catch (IOException e) {
System.out.println("입출력오류...");
System.out.println("드라이버 로딩 실패.");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패~~~");
e.printStackTrace();
}finally {
if(fin!=null) try {fin.close();} catch (IOException e) {}
}
}
//DB에 접속하고 접속이 성공하면 Connection객체를 반환
public static Connection getConnection() {
try {
//return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","ddit","java");
return DriverManager.getConnection(
prop.getProperty("url"),
prop.getProperty("user"),
prop.getProperty("pass")
);
} catch (SQLException e) {
System.out.println("DB 연결 실패~~");
return null;
}
}
}
3. vo프로젝트 및 클래스 만들기
package kr.or.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;
//VO클래스에서 별도의 생성자를 만들때에는 기본 생성자도 반드시 같이 만들어 줌.
//별도의 생성자가 없다면 컴파일러가 자동으로 기본생성자를 만들어줌.
//getter, setter
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;
}
}
4.dao프로젝트 및 클래스만들기
4-1.dao interface에 추상메서드로 작성
-인터페이스로 작성하는 이유?
비즈니스 로직을 처리하는 모델은 요청사항에 따라 언제든 변할수있는 부분으로
변화에 대응하기위해 확장을 염두하여 인터페이스로 구성
package kr.or.mvc.dao;
import java.util.List;
import java.util.Map;
import kr.or.mvc.vo.MemberVO;
/**
* 실제 DB와 연결해서 SQL문을 수행하여 결과를 작성해서 Service에게 전달하는 DAO의 interface
*
* 각 메서드 하나가 DB와 관련된 직업 1개를 수행하도록 작성
*
*
*
* @author PC-06
*
*/
public interface IMemberDao {
/**
* MemberVO에 담겨진 자료를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemeberVO객체
* @return insert성공 : 1, insert 실패 : 0
*/
public int insertMember(MemberVO memVo);
/**
* 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
*
* @param id 삭제할 회원ID
* @return 삭제성공 : 1, 삭제실패 : 0
*/
public int deleteMember(String id);
/**
* MemberVO 자료를 이용하여 회원정보를 수정하는 메서드
*
* @param memVo update할 회원 정보가 저장된 MemberVO객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember(MemberVO memVo);
/**
* 전체 회원의 정보를 가져와서 List에 담아서 반환하는 메서드
*
*
* @return MemberVO객체가 저장된 List객체
*
*
*/
public List<MemberVO> getAllMember();
/**
* 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
*
* @param id 검색할 회원ID
* @return 검색된 회원ID의 개수
*/
public int getMemberIdCount(String id);
//public int updateMember2(String field, String data, String id);
//나쁘지않은 방법이지만 나중에 쓸 프로그램에서는 변수를 한개로 만들어주는것이 좋음.(Map이용)
/**
* Map에 저장된 정보를 이용하여 원하는 항목을 수정하는 메서드
* ==> key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
*
* @param paraMap 회원ID,수정할 컬렴명, 수정할 데이터가 저장될 Map객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember2(Map<String, String> paraMap);
}
4-2. daoImpl class에 구체적으로 구현
package kr.or.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 java.util.Map;
import kr.or.ddit.util.DBUtil3;
import kr.or.mvc.vo.MemberVO;
public class MemberDaoImpl implements IMemberDao{
//1번
private static MemberDaoImpl dao;
//2번
private MemberDaoImpl() {}
//3번
public static MemberDaoImpl getInstance() {
if(dao==null) dao = new MemberDaoImpl();
return dao;
}
@Override
public int insertMember(MemberVO memVo) {
Connection conn=null;
PreparedStatement pstmt=null;
int cnt=0; //반환값이 저장될 변수 선언
try {
//DB에 insert
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) {
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 id) {
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, id);
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_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) {
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 List<MemberVO> getAllMember() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<MemberVO> memList = null; //반환값이 저장될 변수선언
try {
conn = DBUtil3.getConnection();
String sql = "select * from mymember";
stmt = conn.createStatement();
rs=stmt.executeQuery(sql);
memList = new ArrayList<MemberVO>(); //List객체 생성
while(rs.next()) {//레코드 개수만큼 반복
MemberVO memVo = new MemberVO(); //1개의 레코드가 저장될 변수 선언
//VO객체에 DB에서 가져온 컬럼값들을 저장한다.
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); //1개의 레코드가 저장된 MemberVO객체를 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 getMemberIdCount(String id) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int cnt=0;
try {
conn = DBUtil3.getConnection();
String sql ="select count(*) cnt from mymember "
+"where mem_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if(rs.next()) {
cnt = 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 cnt;
}
@Override
public int updateMember2(Map<String, String> paraMap) {
Connection conn = null;
PreparedStatement pstmt = null;
int cnt =0;
//key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
try {
conn=DBUtil3.getConnection();
//paraMap에 저장된 key값을 이용하여 쿼리문을 작성하고
//쿼리문에 들어갈 데이터를 셋팅하는 작업진행
String sql = "update mymember set "+paraMap.get("field")+ " =? where mem_id=? ";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, paraMap.get("data"));
pstmt.setString(2, paraMap.get("memid"));
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
}
return cnt;
}
}
5. service 프로젝트 및 class생성
->dao에서 가져와서 필요한 형식으로 바꾸기
5-1 . service interface 생성
package kr.or.mvc.service;
import java.util.List;
import java.util.Map;
import kr.or.mvc.vo.MemberVO;
/**
* Service객체는 DAO에 만들어진 메서들르 원하는 작업에 맞게 호출하여 실행하고 그 결과를 받아오고,
* 받아온 결과를 Controller에게 보내주는 역할
* 그래서 보통 DAO의 메서드 구조와 같게 만듦.(자바고급단계에서는...스프링, JSP등에서는 달라짐.)
*
*
*
*
* @author PC-06
*
*/
public interface IMemberService {
/**
* MemberVO에 담겨진 자료를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemeberVO객체
* @return insert성공 : 1, insert 실패 : 0
*/
public int insertMember(MemberVO memVo);
/**
* 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
*
* @param id 삭제할 회원ID
* @return 삭제성공 : 1, 삭제실패 : 0
*/
public int deleteMember(String id);
/**
* MemberVO 자료를 이용하여 회원정보를 수정하는 메서드
*
* @param memVo update할 회원 정보가 저장된 MemberVO객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember(MemberVO memVo);
/**
* 전체 회원의 정보를 가져와서 List에 담아서 반환하는 메서드
*
*
* @return MemberVO객체가 저장된 List객체
*
*
*/
public List<MemberVO> getAllMember();
/**
* 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
*
* @param id 검색할 회원ID
* @return 검색된 회원ID의 개수
*/
public int getMemberIdCount(String id);
//public int updateMember2(String field, String data, String id);
//나쁘지않은 방법이지만 나중에 쓸 프로그램에서는 변수를 한개로 만들어주는것이 좋음.(Map이용)
/**
* Map에 저장된 정보를 이용하여 원하는 항목을 수정하는 메서드
* ==> key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
*
* @param paraMap 회원ID,수정할 컬렴명, 수정할 데이터가 저장될 Map객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember2(Map<String, String> paraMap);
}
5-2. serviceImpl class생성
package kr.or.mvc.service;
import java.util.List;
import java.util.Map;
import kr.or.mvc.dao.IMemberDao;
import kr.or.mvc.dao.MemberDaoImpl;
import kr.or.mvc.vo.MemberVO;
public class MemberServiceImpl implements IMemberService {
private IMemberDao dao; // DAO객체가 저장될 변수 선언
private static MemberServiceImpl service; //1번
//생성자
//public MemberServiceImpl () {
private MemberServiceImpl () { //2번
//dao = new MemberDaoImpl(); //DAO객체 생성
dao = MemberDaoImpl.getInstance();
}
public static MemberServiceImpl getInstance() {
if(service == null) service = new MemberServiceImpl();
return service;
}
@Override
public int insertMember(MemberVO memVo) {
return dao.insertMember(memVo);
}
@Override
public int deleteMember(String id) {
return dao.deleteMember(id);
}
@Override
public int updateMember(MemberVO memVo) {
return dao.updateMember(memVo);
}
@Override
public List<MemberVO> getAllMember() {
return dao.getAllMember();
}
@Override
public int getMemberIdCount(String id) {
return dao.getMemberIdCount(id);
}
@Override
public int updateMember2(Map<String, String> paraMap) {
// TODO Auto-generated method stub
return dao.updateMember2(paraMap);
}
}
6.controller 프로젝트 및 class생성
package kr.or.mvc.controller;
import java.security.Provider.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import kr.or.ddit.util.DBUtil;
import kr.or.mvc.service.IMemberService;
import kr.or.mvc.service.MemberServiceImpl;
import kr.or.mvc.vo.MemberVO;
public class MemberController {
private IMemberService service; // Service객체가 저장될 변수 선언
private Scanner sc = new Scanner(System.in);
public MemberController() {
//service = new MemberServiceImpl();
service = MemberServiceImpl.getInstance();
}
public static void main(String[] args) {
new MemberController().memberStart();
}
private 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 : // 수정2
updateMember2();
break;
case 0 :
System.out.println("프로그램을 종료합니다...");
return;
default :
System.out.println("작업 번호를 잘못 입력했습니다.");
System.out.println("다시 입력하세요.");
}
}
}
private void updateMember2() {
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요.");
System.out.println("회원ID>> ");
String id = sc.next();
int count = service.getMemberIdCount(id);
if(count==0) {//없는 회원...
System.out.println(id+"은(는) 없는 회원ID입니다.");
System.out.println("수정 작업을 종료합니다.");
return;
}
int num;
String field = null; //수정항목의 컬럼명이 저장
String title = null;//수정항목을 입력 받을 때 사용할 메세지(항목명)
do {
System.out.println();
System.out.println("수정할 항목을 선택하세요.");
System.out.println("---------------------------------------");
System.out.println("1. 비밀번호 2. 회원이름 3. 전화번호 4. 회원주소");
System.out.println("---------------------------------------");
System.out.println("수정할 항목 선택>> ");
num=sc.nextInt();
switch(num) {
case 1:
field = "mem_pass"; title ="비밀번호";
break;
case 2:
field = "mem_name"; title ="회원이름";
break;
case 3:
field = "mem_tel"; title ="전화번호";
break;
case 4:
field = "mem_addr"; title ="회원주소";
break;
default :
System.out.println("수정할 항목 번호를 잘못입력했습니다.");
System.out.println("다시 선택해주세요.");
break;
}
}while(num<1||num>4);
System.out.println();
sc.nextLine();//입력버퍼 비우기
System.out.println("새로운"+title+">>");
String data = sc.nextLine();
//선택한 컬럼명과 수정할 데이터 그리고 회원ID를 Map에 추가한다.
//key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
Map<String, String> paraMap = new HashMap<String,String>();
paraMap.put("memid", id);
paraMap.put("field", field);
paraMap.put("data", data);
int cnt = service.updateMember2(paraMap);
if(cnt>0) {
System.out.println(" 수정 완료!!!");
}else {
System.out.println(" 수정 실패ㅜㅜ");
}
}
private void updateMember() {
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요.");
System.out.println("회원ID>> ");
String id = sc.next();
int count = service.getMemberIdCount(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();
//입력한 자료를 VO객체에 담는다.
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(id+"회원 정보 수정 완료!!!");
}else {
System.out.println(id+"회원 정보 수정 실패ㅜㅜ");
}
}
private void deleteMember() {
System.out.println();
System.out.println("삭제할 회원 정보를 입력하세요.");
System.out.println("회원ID>> ");
String id = sc.next();
int cnt = service.deleteMember(id);
if(cnt>0) {
System.out.println(id+"회원 정보 삭제 성공!!!");
}else {
System.out.println(id+"회원은 없는 회원이거나 삭제에 실패하였습니다....ㅠㅠ");
}
}
private void displayMember() {
List<MemberVO>memList= service.getAllMember();
System.out.println();
System.out.println("-----------------------------------------------");
System.out.println(" ID PASSWORD 이 름 전화번호 주 소");
System.out.println("-----------------------------------------------");
if(memList==null||memList.size()==0) {
System.out.println("등록된 회원이 하나도 없습니다.");
}else {
for(MemberVO memVo : memList) {
String id = memVo.getMem_id();
String pass = memVo.getMem_pass();
String name = memVo.getMem_name();
String tel = memVo.getMem_tel();
String addr = memVo.getMem_addr();
System.out.println(id+"\t"+pass+"\t"+name+"\t"+tel+"\t"+addr);
}
}
System.out.println("-----------------------------------------------");
System.out.println("출력 끝...");
}
private void insertMember() {
System.out.println();
System.out.println("추가할 회원 정보를 입력하세요.");
int count = 0;
String memId = null;
do {
System.out.print("회원ID >> ");
memId = sc.next();
count = service.getMemberIdCount(memId);
if(count>0) {
System.out.println(memId + "은(는) 이미 등록된 회원ID 입니다.");
System.out.println("다른 회원ID를 입력하세요.");
}
}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();
// 입력한 데이터를 MemberVO객체에 저장한다.
MemberVO memVo = new MemberVO();
memVo.setMem_id(memId);
memVo.setMem_pass(pass);
memVo.setMem_name(name);
memVo.setMem_tel(tel);
memVo.setMem_addr(addr);
//Service의 insert메서드 호출
int cnt = service.insertMember(memVo);
if(cnt>0 ) {
System.out.println(memId + " 회원 정보 추가 완료!!!");
}else {
System.out.println(memId + " 회원 정보 추가 실패~~~");
}
}
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();
}
}
728x90
'ddit > Java' 카테고리의 다른 글
ibatis (0) | 2022.07.29 |
---|---|
싱글톤패턴(Singleton) (0) | 2022.07.27 |
Stack, Queue, Sort (0) | 2022.06.22 |
Collection Framework(Array List, Vector...), generic / 문제풀기 (0) | 2022.06.22 |
객체지향개념을 이해하기 위한 게임만들기 (0) | 2022.06.10 |