MVC 디자인 패턴
: 기능에 따라 분리된 패턴
M(Model) : 데이터베이스에서 사용하고자 하는 데이터를 관리할 수 있는 클래스
V(View) : 실제 사용자가 이용할 수 있는 클래스
C(Controller) : Model과 View를 연결하거나 제어하기 위한 클래스
Model_DTO
package Model;
public class DTO {
// DTO -> DataBase Transfer Object
// Model : 데이터를 관리하는 곳
// -> View나 Controller에 대한 정보는 어떤한 것도 알 수 없다.
// -> 데이터에 관하여 변경이 일어난다면 처리할 수 있는 방법이 있어야 한다.
// 회원의 정보를 관리할 수 있는 설계도 만들기
private String id;
private String pw;
private String name;
private int age;
private int score;
// 기본 생성자 메소드
public DTO() {
}
//생성자 메소드
public DTO(String id, String pw, String name, int age, int score) {
this.id = id;
this.pw = pw;
this.name = name;
this.age = age;
this.score = score;
}
// getters/setters 메소드 생성
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
Model_DAO
package Model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class DAO {
// DAO -> DataBase Access Object
// 데이터베이스의 구동을 위한 작업장소
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
// 데이터베이스 연결을 위한 메소드
public void getCon() {
try {
// 1. 드라이버 로딩
// -> class.forName() -> 사전작업(classpath) 확인 필요
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 데이터베이스 연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "service";
String password = "12345";
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 오류");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("데이터베이스 오류");
e.printStackTrace();
}
}
// 객체 종료를 위한 메소드
public void close() {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
System.out.println("close 오류");
}
}
// sql 실행결과를 담을 수 있는 변수
int row = 0;
// 1. 회원가입을 위한 메소드
public int Join(DTO dto) {
// 드라이버 로딩
getCon();
// 데이터베이스 연결
// sql 전송
String sql = "INSERT INTO BIGMEMBER VALUES(?, ?, ?, ?, ?)";
try {
psmt = conn.prepareStatement(sql);
// ?에 들어갈 내용 연결하기
psmt.setString(1, dto.getId());
psmt.setString(2, dto.getPw());
psmt.setString(3, dto.getName());
psmt.setInt(4, dto.getAge());
psmt.setInt(5, dto.getScore());
// sql문장 실행
row = psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return row;
}
// 2. 로그인을 위한 메소드
public String login(String id, String pw) {
String name = null;
try {
getCon();
String sql = "SELECT * FROM BIGMEMBER WHERE ID = ? AND PW = ?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, pw);
rs = psmt.executeQuery();
if(rs.next() == true) {
name = rs.getString("name");
}
}
catch (Exception e) {
} finally {
close();
}
return name;
}
// 3. 회원 전체정보 조회 메소드
public ArrayList<DTO> selectALL() {
ArrayList<DTO> list = new ArrayList<DTO>();
DTO dto = null;
try {
getCon();
String sql = "SELECT * FROM BIGMEMBER";
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
String name = rs.getString("name");
int age = rs.getInt("age");
int score = rs.getInt("score");
// 조회결과(rs)에 담겨있는 데이터를 DTO로 옮겨담기
dto = new DTO(id, "", name, age, score);
// ArrayList를 이용해서 결과 묶기
list.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return list;
}
// 4. 회원정보 수정 메소드
public int modify(String id, String pw, int score) {
try {
getCon();
String sql = "UPDATE BIGMEMBER SET SCORE = ? WHERE ID = ? AND PW = ?";
psmt = conn.prepareStatement(sql);
psmt.setInt(1, score);
psmt.setString(2, id);
psmt.setString(3, pw);
row = psmt.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
} finally {
close();
}
return row;
}
// 5. 회원 탈퇴 메소드
public int delete(String id, String pw) {
try {
getCon();
String sql = "DELETE FROM BIGMEMBER WHERE ID = ? AND PW = ?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, pw);
row = psmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
close();
}
return row;
}
}
Controller
package Controller;
import Model.DAO;
import Model.DTO;
public class Controller {
//Controller : Model과 View를 연결하기 위한 기능
// -> Model이나 View에 대한 접근 가능
DAO con_dao = new DAO();
DTO con_dto = new DTO();
// 메소드 수행 결과를 담는 변수
int result = 0;
String ans = null;
// 회원가입에 대한 요청
public String con_join(String id, String pw, String name, int age, int score) {
con_dto = new DTO(id, pw, name, age, score);
result = con_dao.Join(con_dto); // 성공 시 -> 1, 실패 시 -> 0
if(result > 0) {
ans = "회원가입 성공";
} else {
ans = "회원가입 실패";
}
return ans;
}
// 로그인에 대한 요청
// 회원 조회에 대한 요청
// 회원 정보 수정 요청
// 회원 탈퇴 요청
}
View_Main
package View;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.ResourceBundle.Control;
import java.util.Scanner;
import Controller.Controller;
import Model.DAO;
import Model.DTO;
public class Main {
public static void main(String[] args) {
// View : 사용자가 사용을 하며, 시각적인 확인을 할 수 있는 용도로 쓰인다.
// -> Model이 가지고 있는 데이터를 저장할 수 없다.
// -> 단순히 표현만 가능할 뿐 다른 기능은 없다.
Scanner sc = new Scanner(System.in);
System.out.println("====회원관리 시스템====");
// 1. 회원가입
// 2. 로그인
// 3. 회원전체조회
// 4. 정보수정
// 5. 회원탈퇴
while (true) {
System.out.print("[1]회원가입 \n[2]로그인 \n[3]전체조회 \n[4]정보수정 \n[5]회원탈퇴 \n[6]종료 \n선택 >> ");
int choice = sc.nextInt();
if(choice == 1) {
System.out.println("회원가입");
System.out.println("ID : ");
String id = sc.next();
System.out.println("PW : ");
String pw = sc.next();
System.out.println("Name : ");
String name = sc.next();
System.out.println("Age : ");
int age = sc.nextInt();
System.out.println("Score : ");
int score = sc.nextInt();
//입력받은 내용 Controller를 통하여 DAO로 전달
Controller con = new Controller();
String result = con.con_join(id, pw, name, age, score);
System.out.println(result);
} else if(choice == 2) {
System.out.println("로그인");
System.out.print("ID : ");
String id = sc.next();
System.out.print("PW : ");
String pw = sc.next();
DAO dao = new DAO();
String name = dao.login(id, pw);
if(name != null) {
System.out.println("로그인 성공");
} else {
System.out.println("로그인 실패");
System.out.println("아이디나 비밀번호를 확인해주세요");
}
} else if(choice == 3) {
System.out.println("전체조회");
// DAO가 가지고 있는 메소드 사용하기
DAO dao = new DAO();
ArrayList<DTO> list = dao.selectALL();
// 결과 값을 가지고 아이디, 이름, 나이, 점수 출력
System.out.println("ID \t 이름 \t 나이 \t 점수");
for(DTO dto :list) {
System.out.print(dto.getId()+" \t");
System.out.print(dto.getName()+" \t");
System.out.print(dto.getAge()+" \t");
System.out.println(dto.getScore());
}
} else if(choice == 4) {
System.out.println("정보수정");
System.out.println("ID : ");
String id = sc.next();
System.out.println("PW : ");
String pw = sc.next();
System.out.println("Score : ");
int score = sc.nextInt();
DAO dao = new DAO();
int row = dao.modify(id, pw, score);
if(row == 0) {
System.out.println("정보수정 실패");
} else {
System.out.println("정보수정 확인");
}
} else if(choice == 5) {
System.out.println("회원탈퇴");
System.out.print("ID : ");
String id = sc.next();
System.out.print("PW : ");
String pw = sc.next();
DAO dao = new DAO();
int row = dao.delete(id, pw);
if(row == 0) {
System.out.println("회원탈퇴 불가");
} else {
System.out.println("회원탈퇴 완료");
}
} else {
System.out.println("프로그램 종료");
break;
}
System.out.println();
}
// 6번 종료가 눌렸을 때에만 프로그램 종료하기
// 이외 메뉴들은 반복적으로 선택 가능
}
}
※회원가입 메소드만 controller 사용해서 출력해본 케이스.
'언어 > JAVA' 카테고리의 다른 글
시험_회원관리 프로그램 (0) | 2023.03.22 |
---|---|
JDBC_로그인 (0) | 2023.03.15 |
JDBC 기초_회원가입창 만들기 (2) | 2023.03.14 |
Interface(인터페이스) (0) | 2023.03.13 |
OOP_추상화 (0) | 2023.03.11 |
댓글