javaDoc
- 문서화할 수 있는 주석
- 단축키 Alt + Shift + F
/** javaDoc문서
*/
javaDoc 문서 Export
NEXT 맨 끝자락에서 인코딩 작업해주기
-charset UTF-8 -encoding UTF-8
package kr.or.ddit.basic;
// javaDoc 문서 만들기 예제 ==> 프로그램과 메뉴얼을 같이 만드는 방법
/**
* 이 영역이 JavaDoc문서의 내용이 들어가는 영역입니다. <br>
* 이 부분은 HTML태그를 사용할 수 있습니다. <br><br>
* @author PC-13
* @version 1.0
*
* <p>
* 파일명 : JavaDocTest.java<br>
* 설 명 : JavaDoc문서 작성을 위한 연습용 interface<br><br>
*
* 변경 내역 <br>
* --------------------------------------------<br>
* 변경 일자 : 2024-05-20 <br>
* 작 성 자 : 오리<br>
* 변경 내용 : 최초 생성<br>
* --------------------------------------------<br>
* </p>
*/
public interface JavaDocTest {
/**
* 메서드명 : methodTest<br>
* 설 명 : 반환값이 없는 메서드<br>
* @param a 첫 번째 매개변수(정수형)
* @param b 두 번째 매개변수(정수형)
*/
public void methodTest(int a, int b);
/**
* 메서드명 : methodAdd<br>
* 설 명 : 반환값이 있는 메서드<br>
* @param x 첫 번째 매개변수(정수형)
* @param y 두 번째 매개변수(정수형)
* @return 처리된 결과를 정수형으로 반환한다.
*/
public int methodAdd(int x, int y);
/**
* 메서드명 : methodInput<br>
* 설 명 : 매개변수가 없는 메서드<br>
* @return 정수형으로 반환한다.
*/
public int methodInput();
}
javaDoc문서 생성 결과값
MVC( Model, View, Controller) 패턴
- MVC 패턴의 비즈니스 처리를 하는 클래스들
- Model : 데이터를 처리하는 것/ 처리하는 과정을 가지고있는 객체
- View : 화면에 보여주는 것(모델이 하나인데 view가 여러 개를 가질 수 있음)
- Controller : 컴퓨터와 사용자 사이의 중개자역할
- 유지보수하기가 쉬움
- 기존에 만들었던 것을 재사용하기 용이하다
- 큰 프로젝트에 주로 사용되며, 주로 웹프로젝트 시 많이 적용이 된다
- Controller이 View역할도 수행하는 모델
- DAO (Data Access Object)
> SQL문을 DB서버로 보내서 결과를 얻어오는 역할을 수행하는 클래스 - VO(Value Object), DTO(Data Transfer Object)
> 데이터를 저장하는 역할만 하는 클래스 - Service
> 일을 수행하는 중간 관리자와 같은 역할을 수행하는 클래스
서비스는 일이 있으면 그 일에 필요한 DAO를 호출해서
일을 처리한 후 처리 결과를 Controller에게 전달한다 - Controller
> 비즈니스 로직이 시작되는 곳으로 사용자의 요청이 오면
그 요청에 맞는 Service에게 일을 시키고, Service가 보내온 처리 결과를
화면 등에 반영시키는 역할을 수행한다
- 현재 많이 사용하고 있는 모델
- controller와 view를 분리하는 모델
회원관리 - MVC패턴 적용 예제 (1 모델)
- 생성 순서
VO(DTO역할) > DAO > Service > Controller - 실행할 데이터는 매개변수로 전달
Controller > Service > DAO - 출력 결과는 반환값(return)으로 전달
DAO > Service > Controller
MemberVO.java
- DB테이블에 있는 컬럼을 기준으로 데이터를 객체화할 클래스
- DB테이블의 '컬럼명'이 이 클래스의 '멤버변수'가 된다.
- DB테이블의 컬럼과 클래스의 멤버변수를 매핑하는 역할을 수행한다.
package kr.or.ddit.member.vo;
public class MemberVO {
private String mem_id;
private String mem_pass;
private String mem_name;
private String mem_tel;
private String mem_addr;
// VO클래스에서 별도의 생성자를 만들 때에는
// 기본 생성자도 반드시 같이 만들어 준다.
public MemberVO() {
}
public MemberVO(String mem_id, String mem_pass, String mem_name, String mem_tel, String mem_addr) {
this.mem_id = mem_id;
this.mem_pass = mem_pass;
this.mem_name = mem_name;
this.mem_tel = mem_tel;
this.mem_addr = 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;
}
@Override
public String toString() {
return "MemberVO [mem_id=" + mem_id + ", mem_pass=" + mem_pass + ", mem_name=" + mem_name + ", mem_tel="
+ mem_tel + ", mem_addr=" + mem_addr + "]";
}
}
IMemberDao.java (interface)
- 실제 DB와 연결해서 SQL문을 수행하여 결과를 작성해서
Service에게 전달하는 DAO의 interface (표준 역할을 수행함) - 매개변수와 return값을 잘 고려하도록 함
- 메서드 하나가 DB와 관련된 작업 1개를 수행하도록 작성한다.
package kr.or.ddit.member.dao;
import java.util.List;
import kr.or.ddit.member.vo.MemberVO;
public interface IMemberDao {
/**
* MemberVO객체에 담겨진 자료를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemberVO 객체
* @return 작업 성공 : 1, 작업 실패 : 0
*/
public int insertMember(MemberVO memVo);
/**
* 회원ID를 매개변수로 받아서 해당 회원 정보를 삭제하는 메서드
* @param mem_id 삭제할 회원ID
* @return 작업 성공 : 1, 작업 실패 : 0
*/
public int deleteMember(String mem_id);
/**
* 매개변수로 받은 MemberVO객체를 이용하여 해당 회원 정보를 수정하는 메서드
* @param memVo update할 회원 정보가 저장된 MemberVO객체
* @return 작업 성공 : 1, 작업 실패 : 0
*/
public int updateMember(MemberVO memVo);
/**
* DB의 전체 회원 정보를 가져와 List에 담아서 반환하는 메서드
* @return 전체 회원정보 각각을 MemberVO에 담고 있는 List객체
*/
public List<MemberVO> getAllMember();
/**
* 회원ID를 매개변수로 받아서 해당 회원ID의 개수를 반환하는 메서드
* @param mem_id 검색할 회원ID
* @return 검색된 회원ID의 갯수
*/
public int getMemIdCount(String mem_id);
/**
* 회원ID를 매개변수로 받아서 해당 회원의 정보를 반환하는 메서드
* @param mem_id 검색할 회원ID
* @return 검색된 회원ID 정보
*/
public MemberVO getMemInfo(String mem_id);
}
MemberDaoImpl.java
package kr.or.ddit.member.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import kr.or.ddit.member.vo.MemberVO;
import kr.or.ddit.util.DBUtil;
public class MemberDaoImpl implements IMemberDao{
@Override
public int insertMember(MemberVO memVo) {
Connection conn = null;
PreparedStatement pstmt = null;
int cnt = 0; // 반환값이 저장될 변수
try {
conn = DBUtil.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 (Exception e) {
// TODO: handle exception
} 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 mem_id) {
Connection conn = null;
PreparedStatement pstmt = null;
int cnt = 0; // 반환값이 저장될 변수
try {
conn = DBUtil.getConnection();
String sql = "delete from mymember where mem_id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, mem_id);
cnt = pstmt.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
} 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 = DBUtil.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 (Exception e) {
// TODO: handle exception
} 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> list = new ArrayList<MemberVO>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
String sql = "select * from mymember";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
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"));
list.add(memVo);
}
} catch (Exception e) {
// TODO: handle exception
} 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 list;
}
@Override
public int getMemIdCount(String mem_id) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0;
try {
conn = DBUtil.getConnection();
String sql = "select count(*) count from mymember where mem_id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, mem_id);
rs = pstmt.executeQuery();
if (rs.next()) {
count = rs.getInt("count");
}
} catch (Exception e) {
// TODO: handle exception
} 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;
}
@Override
public MemberVO getMemInfo(String mem_id) {
MemberVO memVo = new MemberVO();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0;
try {
conn = DBUtil.getConnection();
String sql = "select * from mymember where mem_id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, mem_id);
rs = pstmt.executeQuery();
if (rs.next()) {
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"));
}
} catch (Exception e) {
// TODO: handle exception
} 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 memVo;
}
}
IMemberService.java (interface)
- Service객체는 DAO에 만들어진 메서드를 원하는 작업에 맞게 호출하여
결과를 받아오고, 받아온 결과를 Controller에게 보내주는 역할을 한다 - 보통 DAO의 메서드와 구조가 같다
package kr.or.ddit.member.service;
import java.util.List;
import kr.or.ddit.member.vo.MemberVO;
public interface IMemberService {
/**
* MemberVO객체에 담겨진 자료를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemberVO 객체
* @return 작업 성공 : 1, 작업 실패 : 0
*/
public int insertMember(MemberVO memVo);
/**
* 회원ID를 매개변수로 받아서 해당 회원 정보를 삭제하는 메서드
* @param mem_id 삭제할 회원ID
* @return 작업 성공 : 1, 작업 실패 : 0
*/
public int deleteMember(String mem_id);
/**
* 매개변수로 받은 MemberVO객체를 이용하여 해당 회원 정보를 수정하는 메서드
* @param memVo update할 회원 정보가 저장된 MemberVO객체
* @return 작업 성공 : 1, 작업 실패 : 0
*/
public int updateMember(MemberVO memVo);
/**
* DB의 전체 회원 정보를 가져와 List에 담아서 반환하는 메서드
* @return 전체 회원정보 각각을 MemberVO에 담고 있는 List객체
*/
public List<MemberVO> getAllMember();
/**
* 회원ID를 매개변수로 받아서 해당 회원ID의 개수를 반환하는 메서드
* @param mem_id 검색할 회원ID
* @return 검색된 회원ID의 갯수
*/
public int getMemIdCount(String mem_id);
/**
* 회원ID를 매개변수로 받아서 해당 회원의 정보를 반환하는 메서드
* @param mem_id 검색할 회원ID
* @return 검색된 회원ID 정보
*/
public MemberVO getMemInfo(String mem_id);
}
MemberServiceImpl.java
package kr.or.ddit.member.service;
import java.util.List;
import kr.or.ddit.member.dao.IMemberDao;
import kr.or.ddit.member.dao.MemberDaoImpl;
import kr.or.ddit.member.vo.MemberVO;
public class MemberServiceImpl implements IMemberService {
private IMemberDao dao; // DAO객체가 저장될 변수 선언
// 생성자
public MemberServiceImpl() {
dao = new MemberDaoImpl(); // DAO객체 생성
}
@Override
public int insertMember(MemberVO memVo) {
return dao.insertMember(memVo);
}
@Override
public int deleteMember(String mem_id) {
return dao.deleteMember(mem_id);
}
@Override
public int updateMember(MemberVO memVo) {
return dao.updateMember(memVo);
}
@Override
public List<MemberVO> getAllMember() {
return dao.getAllMember();
}
@Override
public int getMemIdCount(String mem_id) {
return dao.getMemIdCount(mem_id);
}
@Override
public MemberVO getMemInfo(String mem_id) {
return dao.getMemInfo(mem_id);
}
}
MemberController.java
package kr.or.ddit.member.controller;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;
public class MemberController {
private Scanner scan;
private IMemberService service;
public MemberController() {
service = new MemberServiceImpl();
scan = new Scanner(System.in);
}
public static void main(String[] args) {
new MemberController().memberStart();
}
// 시작 메서드
public void memberStart() {
while (true) {
int sel = displayMenu();
switch (sel) {
case 1:
insert();
break;
case 2:
delete();
break;
case 3:
update();
break;
case 4:
update_part();
break;
case 5:
print();
break;
case 0:
System.out.println("시스템을 종료합니다");
return;
default:
break;
}
}
}
private void update_part() {
String mem_id = "";
System.out.print("ID >> ");
mem_id = scan.next();
int count = service.getMemIdCount(mem_id);
if (count == 0) {
System.out.println("존재하지 않는 아이디입니다.");
return;
}
String sel = displayUpdateMenu();
try {
MemberVO memVo = service.getMemInfo(mem_id);
if (sel.contains("1")) {
System.out.print("PW >> ");
memVo.setMem_pass(scan.next());
}
if (sel.contains("2")) {
System.out.print("이름 >> ");
memVo.setMem_name(scan.next());
}
if (sel.contains("3")) {
System.out.print("전화번호 >> ");
memVo.setMem_tel(scan.next());
}
if (sel.contains("4")) {
scan.nextLine();
System.out.print("주소 >> ");
memVo.setMem_addr(scan.nextLine());
}
service.updateMember(memVo);
} catch (Exception e) {
// TODO: handle exception
}
}
public String displayUpdateMenu() {
System.out.println("업데이트할 내용을 선택해주세요");
System.out.println("중복선택이 가능합니다");
System.out.println("ex. 123 > 비밀번호/이름/전화번호 수정");
System.out.println();
System.out.println("1. 비밀번호 수정");
System.out.println("2. 이름 수정");
System.out.println("3. 전화번호 수정");
System.out.println("4. 주소 수정");
return scan.next();
}
private void print() {
List<MemberVO> list = service.getAllMember();
System.out.println("-- 전체 자료 출력 --");
System.out.println();
System.out.println("-------------------------------------------------");
System.out.println("회원아이디\t비밀번호\t회원이름\t전화번호\t\t주소");
System.out.println("-------------------------------------------------");
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());
}
System.out.println("-------------------------------------------------");
}
private void update() {
String mem_id = "";
System.out.print("ID >> ");
mem_id = scan.next();
int count = service.getMemIdCount(mem_id);
if (count == 0) {
System.out.println("존재하지 않는 아이디입니다.");
return;
}
System.out.println("변경할 정보를 입력해주세요");
MemberVO memVo = new MemberVO();
memVo.setMem_id(mem_id);
System.out.print("PW >> ");
memVo.setMem_pass(scan.next());
System.out.print("이름 >> ");
memVo.setMem_name(scan.next());
System.out.print("전화번호 >> ");
memVo.setMem_tel(scan.next());
// 버퍼 삭제
scan.nextLine();
System.out.print("주소 >> ");
memVo.setMem_addr(scan.nextLine());
service.updateMember(memVo);
}
private void delete() {
String mem_id = "";
System.out.print("ID >> ");
mem_id = scan.next();
int count = service.getMemIdCount(mem_id);
if (count == 0) {
System.out.println("존재하지 않는 아이디입니다.");
return;
}
service.deleteMember(mem_id);
System.out.println("삭제가 완료되었습니다.");
}
private void insert() {
String mem_id = "";
int count;
do {
count = 0;
System.out.print("ID >> ");
mem_id = scan.next();
count = service.getMemIdCount(mem_id);
if (count > 0) {
System.out.println("중복된 아이디입니다");
}
} while (count > 0);
MemberVO memVo = new MemberVO();
memVo.setMem_id(mem_id);
System.out.print("PW >> ");
memVo.setMem_pass(scan.next());
System.out.print("이름 >> ");
memVo.setMem_name(scan.next());
System.out.print("전화번호 >> ");
memVo.setMem_tel(scan.next());
// 버퍼 삭제
scan.nextLine();
System.out.print("주소 >> ");
memVo.setMem_addr(scan.nextLine());
service.insertMember(memVo);
}
private int displayMenu() {
System.out.println("1. 자료 추가");
System.out.println("2. 자료 삭제");
System.out.println("3. 자료 수정");
System.out.println("4. 부분 수정");
System.out.println("5. 전체 자료 출력");
System.out.println("0. 작업 끝");
System.out.print("메뉴 >> ");
int sel = scan.nextInt();
return sel;
}
}
'JAVA > HIGH JAVA' 카테고리의 다른 글
5/21 Homework - 게시판 만들기 (0) | 2024.05.21 |
---|---|
[JAVA] SingleTon (0) | 2024.05.21 |
[JAVA] JDBC - util생성, 활용 (0) | 2024.05.16 |
5/13 Homework - lprod테이블 추가 (0) | 2024.05.13 |
[JAVA] JDBC (0) | 2024.05.13 |