java 11일차 복기(UML구현)

KHLee·2023년 3월 9일

자바수업

목록 보기
15/46

구성 순서 :
DATABASE에 어떤 요소로 구분되어 저장되는지에 따라 DTO를 구성.
-> Account, Transaction, User DTO에 field값 부여.
-> DTO 필드값 이용하여 DAO interface구성(추상함수) - insert delete update 등. 예외처리 선언 해주기 시작. 제네릭 변수 지정.
-> DAO 기능 이용하여 Service interface구성(추상함수) - DAO의 함수를 이용하는 register, remove, modify 등. 고객이 접하는 메뉴와 비슷. 예외처리 선언 해주기 시작.
-> DAO, Service 인터페이스 이용한 UserDAO, UserService 구성. 제네릭에 들어갈 값 지정 및 예외처리 상황 지정.
-> DAO에서 지정한 예외사항은 Service에서는 처리하지 않고 App로 넘기기.
-> Service구성 시에는 DAO 함수를 사용함으로 선언을 해주고, App구성 시에는 Service함수를 사용함으로 선언을 해줘야한다.

UserDTO

package com.kbstar.dto;

public class UserDTO {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private String contact;
	
	public UserDTO() {
	}
	public UserDTO(String id, String pwd, String name) {
		this.id = id;
		this.pwd = pwd;
		this.name = name;
	}
	
	public UserDTO(String id, String pwd, String name, String email, String contact) {
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
		this.contact = contact;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getContact() {
		return contact;
	}
	public void setContact(String contact) {
		this.contact = contact;
	}
	@Override
	public String toString() {
		return "UserDTO [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", contact=" + contact
				+ "]";
	}

	
}
package com.kbstar.dto;

public class AccountDTO {
	private String accNum;
	private double balance;
	private String holder;
	public AccountDTO() {
	}
	public AccountDTO(String accNum, double balance, String holder) {
		this.accNum = accNum;
		this.balance = balance;
		this.holder = holder;
	}
	public String getAccNum() {
		return accNum;
	}
	public void setAccNum(String accNum) {
		this.accNum = accNum;
	}
	public double getBalance() {
		return balance;
	}
//	public void setBalance(double balance) {
//		this.balance = balance;
//	}
	public String getHolder() {
		return holder;
	}
	public void setHolder(String holder) {
		this.holder = holder;
	}
	@Override
	public String toString() {
		return "AccountDTO [accNum=" + accNum + ", balance=" + balance + ", holder=" + holder + "]";
	}
	
}
package com.kbstar.dto;

public class TransactionDTO {
	private String date;//primarykey 거래일시
	private String accNo;
	private double balance;
	private String type;// I O 로 구분(인, 아웃)
	private String desc;
	public TransactionDTO() {
	}
	public TransactionDTO(String date, String accNo, double balance, String type, String desc) {
		this.date = date;
		this.accNo = accNo;
		this.balance = balance;
		this.type = type;
		this.desc = desc;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public String getAccNo() {
		return accNo;
	}
	public void setAccNo(String accNo) {
		this.accNo = accNo;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	@Override
	public String toString() {
		return "TransactionDTO [date=" + date + ", accNo=" + accNo + ", balance=" + balance + ", type=" + type
				+ ", desc=" + desc + "]";
	}
	
	
	
}

DAO

package com.kbstar.frame;

import java.util.List;

public interface DAO<K, V> {
	//database의 입력, 삭제, 조회, 수정을 정의한 것이다.
	
	public void insert(V v) throws Exception;
	public void delete(K k) throws Exception;
	public void update(V v) throws Exception;
	public V select(K k) throws Exception;
	public List<V> select() throws Exception;
}
package com.kbstar.frame;

import java.util.List;

public interface CRUDService<K, V> {
	// 'app화면에서 어떤 기능들이 있다'를 구현하는 게 Service단락에서 해줌.
	// 일반적인 가입, 조회, 삭제 기능이다. 추후 DAO와 연동하여 DATABASE에서 처리.
	// 메일을 보내는 service를 추가한다 -> DAO에도 보내고 SMS서버에도 보내고.
	// 이체서비스가 생긴다하면 추가해준다.
	// insert, delete, update는 데이터베이스 처리 관점 용어이고
	// register, remove, modify는 고객이 이용하는 서비스 관점 용어다.
	
	public void register(V v) throws Exception;
	public void remove(K k) throws Exception;
	public void modify(V v) throws Exception;
	public V get(K k) throws Exception;
	public List<V> get() throws Exception;
}
package com.kbstar.frame;

public interface Notification {
	public void sendEmail(String email, String msg) throws Exception;
	public void sendSMS(String contact, String msg) throws Exception;

}
package com.kbstar.frame;

public class Msg {
	//메세지도 별도고 관리하기 위해 만듬.
	//properties를 이용해도 된다.
	public static String registerMsg1 = "가입을 축하합니다.";
	public static String registerMsg2 = "가입을 진심으로 축하합니다.";
	public static String removeMsg1 = "탈퇴를 축하합니다.";
	public static String removeMsg2 = "탈퇴를 진심으로 축하합니다.";
}

package com.kbstar.frame;

public class MakeMessage {
	public static String makeMessage(String code) {
		String result = "";
		switch(code) {
		case "ER0001" : result = "계좌개설 실패...";
		break;
		case "ER0002" : result = "음수 입력...";
		break;
		case "ER0003" : result = "잔액 부족...";
		break;
		case "ER0004" : result = "이미 있는 아이디입니다.";
		break;
		case "ER0005" : result = "삭제할 수 없는 아이디 입니다.";
		break;
		case "ER0006" : result = "수정할 수 없는 아이디입니다.";
		break;
		case "ER1001" : result = "이미 있는 상품번호입니다.";
		break;
		case "ER1002" : result = "삭제할 수 없는 상품번호입니다.";
		break;
		case "ER1003" : result = "수정할 수 없는 상품번호입니다.";
		break;
		default : result = "고객센터에 문의하세요...";
		}
		return result;
	}
}
package com.kbstar.frame;

import java.util.Calendar;

public class MakeAccountNumber {
	public static int cnt = 100;
	public static int cnt2 = 100;
	public static String makeTrNum() {
		String trNum = "";
		Calendar cal = Calendar.getInstance();
		trNum = "" + cal.get(Calendar.YEAR)
		            + (cal.get(Calendar.MONTH)+1)
		            + cal.get(Calendar.DAY_OF_MONTH)
		            + cal.get(Calendar.MILLISECOND)
		            + cnt2;
		cnt2++;
		return trNum;
	}
	public static String makeAccNum() {
		String accNum = "";
		Calendar cal = Calendar.getInstance();
		accNum = "" + cal.get(Calendar.YEAR)
		            + (cal.get(Calendar.MONTH)+1)
		            + cal.get(Calendar.DAY_OF_MONTH)
		            + cnt;
		cnt++;
		return accNum;
	}
}

UserDAO

package com.kbstar.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

import com.kbstar.dto.UserDTO;
import com.kbstar.frame.DAO;

public class UserDAO implements DAO <String, UserDTO>{
	//여기는 비즈니스 로직은 전혀 들어가지 않는다(회원가입시 ㅇㅇ를 체크하고 메일을 보내고 등)
	//오직 데이터베이스 처리관련 명령어만 들어간다.
	
	HashMap<String, UserDTO> db;
	public UserDAO() {
		db = new HashMap<>();
	}
	
	
	@Override
	public void insert(UserDTO v) throws Exception {
		if (db.containsKey(v.getId())) {//실제 데이터베이스에서는 자동으로 걸러줌.
			throw new Exception("DB ERROR 이미 존재하는 아이디입니다.");
		}
		db.put(v.getId(), v);
	}

	@Override
	public void delete(String k) throws Exception {
		if(!db.containsKey(k)) {
			throw new Exception("DB ERROR 존재하지 않는 아이디입니다.");
		}
		db.remove(k);
	}

	@Override
	public void update(UserDTO v) throws Exception {
		if(!db.containsKey(v.getId())) {
			throw new Exception("DB ERROR 존재하지 않는 아이디입니다.");
		}
		db.put(v.getId(), v);
		
	}

	@Override
	public UserDTO select(String k) throws Exception {
		if(!db.containsKey(k)) {
			throw new Exception("DB ERROR 존재하지 않는 아이디입니다.");
		}
		UserDTO obj = null;//유저정보를 데이터베이스에서 가져온다. 유저정보 객체를 만든다.
		obj = db.get(k);
		return obj;
		
	}

	@Override
	public List<UserDTO> select() throws Exception {
		if (db == null) {
			throw new Exception("DB ERROR 등록된 정보가 없습니다.");
		}
		ArrayList<UserDTO> list = new ArrayList<UserDTO>();
		Collection<UserDTO> col = db.values();
		for (UserDTO obj : col) {
			list.add(obj);
		}
		
		return list;
	}

}

package com.kbstar.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

import com.kbstar.dto.AccountDTO;
import com.kbstar.frame.DAO;

public class AccountDAO implements DAO<String, AccountDTO>{

	HashMap<String, AccountDTO> db;
	
	public AccountDAO() {
		db = new HashMap<>();
	}
	
	@Override
	public void insert(AccountDTO v) throws Exception {
		if(db.containsKey(v.getAccNum())) {
			throw new Exception("같은 계좌가 존재합니다.");
		}
		db.put(v.getAccNum(), v);
	}

	@Override
	public void delete(String k) throws Exception {
		if(!db.containsKey(k)) {
			throw new Exception("입력하신 계좌는 없는 계좌입니다.");
		}
		db.remove(k);
	}

	@Override
	public void update(AccountDTO v) throws Exception {
		if(!db.containsKey(v.getAccNum())) {
			throw new Exception("입력하신 계좌는 없는 계좌입니다.");
		}
		db.put(v.getAccNum(), v);
	}

	@Override
	public AccountDTO select(String k) throws Exception {
		if(!db.containsKey(k)) {
			throw new Exception("입력하신 계좌는 없는 계좌입니다.");
		}
		AccountDTO obj= null;
		obj = db.get(k);
		return obj;
	}

	@Override
	public List<AccountDTO> select() throws Exception {
		if(db == null) {
			throw new Exception("보유중인 계좌가 없습니다.");
		}
		List<AccountDTO> list = new ArrayList<AccountDTO>();
		Collection<AccountDTO> col;
		col = db.values();
		for (AccountDTO obj : col) {
			list.add(obj);
		}
		return list;
	}



}

package com.kbstar.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

import com.kbstar.dto.TransactionDTO;
import com.kbstar.frame.DAO;

public class TransactionDAO implements DAO<String, TransactionDTO>{

	HashMap<String, TransactionDTO> db;
	
	public TransactionDAO() {
		db = new HashMap<>();
	}
	
	@Override
	public void insert(TransactionDTO v) throws Exception {
		if(db.containsKey(v.getDate())) {
			throw new Exception("같은 거래내역이 존재합니다.");
		}
		db.put(v.getDate(), v);
	}

	@Override
	public void delete(String k) throws Exception {	
	}

	@Override
	public void update(TransactionDTO v) throws Exception {
	}

	@Override
	public TransactionDTO select(String k) throws Exception {
		if(!db.containsKey(k)) {
			throw new Exception("입력하신 계좌는 없는 계좌입니다.");
		}
		TransactionDTO obj= null;
		obj = db.get(k);
		return obj;
	}

	@Override
	public List<TransactionDTO> select() throws Exception {
		if(db == null) {
			throw new Exception("보유중인 계좌가 없습니다.");
		}
		List<TransactionDTO> list = new ArrayList<TransactionDTO>();
		Collection<TransactionDTO> col;
		col = db.values();
		for (TransactionDTO obj : col) {
			list.add(obj);
		}
		return list;
	}

}


package com.kbstar.noti;

import com.kbstar.frame.Notification;

public class NotificationImpl implements Notification {

	@Override
	public void sendEmail(String email, String msg) throws Exception {
		System.out.printf("%s에게 %s 전송\n",email, msg);
	}

	@Override
	public void sendSMS(String contact, String msg) throws Exception {
		System.out.printf("%s에게 %s 전송\n",contact, msg);
	}

}

UserService

package com.kbstar.service;

import java.util.List;

import com.kbstar.dao.UserDAO;
import com.kbstar.dto.UserDTO;
import com.kbstar.frame.DAO;
import com.kbstar.frame.Msg;
import com.kbstar.frame.Notification;
import com.kbstar.frame.CRUDService;
import com.kbstar.noti.NotificationImpl;

public class UserService implements CRUDService<String, UserDTO> {

	// 처음에 선언하고 사용하는 것 눈에 익게 하기.
	DAO<String, UserDTO> userDao;
	Notification notification;

	public UserService() {
		userDao = new UserDAO();
		notification = new NotificationImpl();
	}

	@Override
	public void register(UserDTO v) throws Exception {
		// 비밀번호 암호화
		try {
			userDao.insert(v);
		} catch (Exception e) {
			throw new Exception("회원가입이 실패하였습니다.(EX0001)");// DB에러를 바로 APP로 던지기 전에 예외처리를 자세히한 후 던짐.
		}
		notification.sendEmail(v.getEmail(), Msg.registerMsg1);
		notification.sendSMS(v.getContact(), Msg.registerMsg2);
	}

	@Override
	public void remove(String k) throws Exception {//비즈니스로직의 기본적인 이해
		UserDTO user = null;//2. 받을준비해~
		user = userDao.select(k);//3. 삭제전에 미리 받아놔~
		try {
			userDao.delete(k);
		} catch(Exception e) {
			throw new Exception("탈퇴오류입니다.");
		}
		notification.sendSMS(user.getContact(), Msg.removeMsg1 + Msg.removeMsg2);//1. 이메일을 입력해야하는데 k 말고, 전화정보를 받아야하네? 
	}

	@Override
	public void modify(UserDTO v) throws Exception {
		try {
			userDao.update(v);
		} catch(Exception e) {
			throw new Exception("수정오류입니다.");
		}
	}

	@Override
	public UserDTO get(String k) throws Exception {
		UserDTO obj = null;// UserDTO타입을 받을준비해
		obj = userDao.select(k);
		return obj;
	}

	@Override
	public List<UserDTO> get() throws Exception {
		List<UserDTO> list = null;
		try {
			list = userDao.select();
		} catch(Exception e) {
			//throw new Exception("조회오류");
		}
		return list;
	}

}


package com.kbstar.service;

import java.util.List;

import com.kbstar.dao.AccountDAO;
import com.kbstar.dto.AccountDTO;
import com.kbstar.frame.DAO;
import com.kbstar.frame.Notification;
import com.kbstar.frame.CRUDService;
import com.kbstar.noti.NotificationImpl;

public class AccountService implements CRUDService<String, AccountDTO>{

	DAO<String, AccountDTO> accDao;
	Notification notification;
	
	public AccountService() {
		accDao = new AccountDAO();
		notification = new NotificationImpl();
	}
	
	@Override
	public void register(AccountDTO v) throws Exception {
		try {
			accDao.insert(v);
			//System.out.println(v);
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

	@Override
	public void remove(String k) throws Exception {
		try {
			accDao.delete(k);
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

	@Override
	public void modify(AccountDTO v) throws Exception {
		try {
			accDao.update(v);
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

	@Override
	public AccountDTO get(String k) throws Exception {
		try {
			AccountDTO obj = null;
			obj = accDao.select(k);
			return obj;
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

	@Override
	public List<AccountDTO> get() throws Exception {
		try {
			List<AccountDTO> list = null;
			list = accDao.select();
			return list;
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

}


package com.kbstar.service;

import java.util.List;

import com.kbstar.dao.TransactionDAO;
import com.kbstar.dto.TransactionDTO;
import com.kbstar.frame.CRUDService;
import com.kbstar.frame.DAO;
import com.kbstar.frame.Notification;
import com.kbstar.noti.NotificationImpl;

public class TransactionService implements CRUDService<String, TransactionDTO> {

	DAO<String, TransactionDTO> transDao;
	Notification notification;
	
	public TransactionService() {
		transDao = new TransactionDAO();
		notification = new NotificationImpl();
	}
	
	@Override
	public void register(TransactionDTO v) throws Exception {
		try {
			transDao.insert(v);
			//System.out.println(v);
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

	@Override
	public void remove(String k) throws Exception {
	}

	@Override
	public void modify(TransactionDTO v) throws Exception {
	}

	@Override
	public TransactionDTO get(String k) throws Exception {
		try {
			TransactionDTO obj = null;
			obj = transDao.select(k);
			return obj;
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

	@Override
	public List<TransactionDTO> get() throws Exception {
		try {
			List<TransactionDTO> list = null;
			list = transDao.select();
			return list;
		}catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

}

test

package com.kbstar.test;

import java.util.List;

import com.kbstar.dto.UserDTO;
import com.kbstar.frame.CRUDService;
import com.kbstar.service.UserService;

public class UserRegisterTest {

	public static void main(String[] args) {
		CRUDService<String, UserDTO> service = new UserService();
		UserDTO obj = 
		new UserDTO("id01", "pwd01", "james", "a@naver.com", "010-9999-0292");			
		UserDTO obj2 = 
		new UserDTO("id02", "pwd02", "james", "a@naver.com", "010-9999-0292");			
		UserDTO obj3 = 
		new UserDTO("id03", "pwd03", "james", "a@naver.com", "010-9999-0292");			
	
		try {
			service.register(obj);
			service.register(obj2);
			service.register(obj3);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		// get(k) test ------------------------------------
		UserDTO user = null;
		try {
			user = service.get("id01");
			System.out.println(user);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// get() test ------------------------------------
		// Emp e = new Manager();
		// List list = new ArrayList();
		
		List<UserDTO> list = null;
		
		try {
			list = service.get();
			for(UserDTO u: list) {
				System.out.println(u);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// remove() test ------------------------------------
		try {
			service.remove("id05");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		
	}

}




package com.kbstar.test;

import java.util.List;

import com.kbstar.dto.AccountDTO;
import com.kbstar.frame.CRUDService;
import com.kbstar.frame.MakeAccountNumber;
import com.kbstar.service.AccountService;

public class AccountRegisterTest {

	public static void main(String[] args) {
		CRUDService<String, AccountDTO> service = new AccountService();
		AccountDTO obj = 
				new AccountDTO(MakeAccountNumber.makeAccNum(), 10000, "id01");			
		
		AccountDTO obj2 = 
				new AccountDTO(MakeAccountNumber.makeAccNum(), 20000, "id01");			
		
		AccountDTO obj3 = 
				new AccountDTO(MakeAccountNumber.makeAccNum(), 30000, "id02");			
	
		try {
			service.register(obj);
			service.register(obj2);
			service.register(obj3);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		// get(k) test ------------------------------------
		AccountDTO Account = null;
		try {
			Account = service.get("202339100");
			System.out.println(Account);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// get() test ------------------------------------
		// Emp e = new Manager();
		// List list = new ArrayList();
		
		List<AccountDTO> list = null;
		
		try {
			list = service.get();
			for(AccountDTO u: list) {
				System.out.println(u);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// remove() test ------------------------------------
		try {
			service.remove("id01");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		
	}

}




package com.kbstar.test;

import java.util.List;

import com.kbstar.dto.TransactionDTO;
import com.kbstar.frame.CRUDService;
import com.kbstar.frame.MakeAccountNumber;
import com.kbstar.service.TransactionService;

public class TransactionRegisterTest {

	public static void main(String[] args) {
		CRUDService<String, TransactionDTO> service = new TransactionService();
		TransactionDTO obj = 
				new TransactionDTO(MakeAccountNumber.makeTrNum(),"20230309100",500,"O","국민카드");			
		TransactionDTO obj2 = 
				new TransactionDTO(MakeAccountNumber.makeTrNum(),"20230309100",600,"O","국민카드");			
		TransactionDTO obj3 = 
				new TransactionDTO(MakeAccountNumber.makeTrNum(),"20230309100",700,"O","국민카드");			
	
		try {
			service.register(obj);
			service.register(obj2);
			service.register(obj3);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		// get(k) test ------------------------------------조회하기 어려움. 값이 계속 바뀜
		TransactionDTO Transaction = null;
		try {
			Transaction = service.get("id01");
			System.out.println(Transaction);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// get() test ------------------------------------
		// Emp e = new Manager();
		// List list = new ArrayList();
		
		List<TransactionDTO> list = null;
		
		try {
			list = service.get();
			for(TransactionDTO u: list) {
				System.out.println(u);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		
		
	}

}
profile
안녕하세요

0개의 댓글