본문 바로가기

PROJECT/커피숍

[토이/자바/JDBC] 커피숍 키오스크 만들기(8) : DAO

 

DTO를 만들었다면 DAO를 만들 차례이다. DAO는 실제로 DB의 data에 접근하기 위한 객체이다. 순수한 데이터를 보관하는 DTO와는 달리 DAO는 DB에 접근하여 데이터를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행한다.

 

DAO는 주로 인터페이스로 만들기 때문에 DB와 직접 연계되는 테이블의 엔티티의 노출을 최소화할 수 있고 구현클래스를 따로 두어 클래스 간의 관계를 유연하게 만들어줄 수 있다.

 

DAO는 인터페이스이기 때문에 메서드를 선언만 할 수 있는데, 해당 메서드가 구현체에서 어떤 기능을 하게 될지 DAO 작성 시점에 문서화 주석으로 자세히 기술해두는 것이 좋다. 지금은 혼자 개발을 하기 때문에 별다른 문제가 없을 수 있지만 함께 팀으로 개발을 하게 되는 경우 이러한 주석이 다른 사람이 만든 인터페이스가 어떤 기능을 하는지 보다 쉽게 알 수 있게 해준다.

 

내가 구성한 Dao는 총 4가지로 제품, 주문, 관리자, 사용자를 기준으로 분류하였다.

 

IMenuDao : 제품에 관련된 기능들을 모아둔 인터페이스

package coffee.pj.dao;

import java.util.List;

import coffee.pj.dto.Menu_DTO;

public interface IMenuDao {
	
	/**
	 * (관리자 전용) 모든 메뉴를 조회하는 getAllMenu();
	 * @return 모든 메뉴 조회 java.util.List<Menu_DTO>
	 */
	public List<Menu_DTO> getAllMenu();
	
	
	/**
	 * (사용자 전용) 모든 메뉴를 조회하는 getUserMenu();
	 * @param meu_num 메뉴 번호 int
	 * @return 모든 메뉴 조회 java.util.List<Menu_DTO>
	 */
	public List<Menu_DTO> getUserMenu(int menu_type);
	
	
	/**
	 * 메뉴 번호를 통한 메뉴 상세 정보 조회 getOneMenu
	 * @param meu_num 메뉴 번호 int
	 * @return 메뉴 상세 정보 NAME, MENU_PRICE, MENU_DETAIL 
	 */
	public Menu_DTO getOneMenu(int meu_num);
	
	/**
	 * 메뉴 추가, 재고 등록 (트랜잭션) setMenu 
	 * @param 메뉴 정보 MENU_TYPE, MENU_NAME, MENU_PRICE, MENU_DETAIL
	 * @return 성공여부 실패 0, 성공 1
	 */
	public int setMenu(Menu_DTO dto);
	
	/**
	 * 메뉴 정보 변경
	 * @param menu_type 변경할 메뉴 타입(음료1, 디저트2)
	 * @param menu_name 변경할 메뉴 이름
	 * @param menu_price 변경할 메뉴 가격
	 * @param menu_detail 변경할 메뉴 상세설명
	 * @param menu_num 변경할 메뉴 번호
	 * @return 성공여부 실패 0, 성공 1
	 */
	public int modifyMenu(int menu_type, String menu_name, int menu_price, String menu_detail, int menu_num);
	
	/**
	 * 메뉴 정보 row를 삭제
	 * @param 삭제할 메뉴의 번호
	 * @return 성공 여부 실패 0, 성공 1
	 */
	public int delMenu(int menu_no);

}

 

 

IAdminMemDao : 관리자 모드로 사용할 때의 기능을 모아둔 인터페이스

package coffee.pj.dao;

import java.util.List;

import coffee.pj.dto.Member_DTO;

public interface IAdminMemDao {
	
	/**
	 * (관리자 전용)사용자 전체 조회 getAllMem();
	 * @return 사용자 전체 조회 java.util.List<Member_DTO>
	 */
	public List<Member_DTO> getAllMem();
	
	/**
	 * (관리자 전용) 주문 일자를 통해 하루 매출 정보 조회 getOneSales
	 * @param order_date 주문일자 String
	 * @return 해당 주문 일자에 결제된 모든 제품 판매금액 합산
	 */
	public int getOneSales(String order_date);
	
	/**
	 * (관리자 전용) 멤버 추가 setMem (관리자, 손님)
	 * (DB:mem_cart 트리거 처리)
	 * @param mem_type 등록할 멤버 타입 (관리자1, 손님2)
	 * @param mem_name 등록할 멤버 이름 (중복가능)
	 * @param mem_phone 등록할 휴대폰 번호 (중복불가)
	 * @return 성공여부 실패0, 성공1
	 */
	public int setMem(int mem_type, String mem_name, String mem_phone);
	
	/**
	 * (관리자 전용) 멤버 삭제 delAdMem
	 * @param mem_name 삭제할 멤버 이름
	 * @param mem_phone 삭제할 휴대폰 번호
	 * @return 성공여부 실패0, 성공1
	 */
	public int delMem(String mem_name, String mem_phone);

}

 

 

IUserMemDao : 고객 모드로 사용할 때의 기능을 모아둔 인터페이스

package coffee.pj.dao;

public interface IUserMemDao {
	
	/**
	 * (사용자 전용) 회원 가입, 중복 유효성 검사 트랜잭션 실행 getJoinMem
	 * @param mem_name 등록할 회원 이름 (중복가능)
	 * @param mem_phone 등록할 회원 번호 (중복불가)
	 * @return 성공여부 실패0, 성공1
	 */
	public int getJoinMem(String mem_name, String mem_phone);
	
	/**
	 * (관리자, 사용자 전용) 로그인 (이름, 번호 둘다 만족해야 로그인)
	 * @param mem_name 로그인할 회원 이름
	 * @param mem_phone 로그인할 회원 번호
	 * @return 성공여부 실패0, 성공1
	 */
	public int loginMem(String mem_name, String mem_phone);
	
	/**
	 * (사용자 전용) 게스트 로그인. 로그인 없이 주문하는 사용자 전용 (자동 생성, 입력값 없음)
	 * @return 성공여부 실패0, 성공1
	 */
	public int loginGuest();


}

 

 

IOrderMenuDao : 주문과 관련된 기능을 모아둔 인터페이스

package coffee.pj.dao;

import java.util.List;

import coffee.pj.dto.MemCart_DTO;
import coffee.pj.dto.Optional_DTO;

public interface IOrderMenuDao {
	
	/**
	 * 메뉴 번호를 선택해 주문서에 주문을 업데이트하는 메서드 setOrder
	 * 재고 자동 차감 트리거
	 * 로그인한 회원은 장바구니 자동업데이트 트랜잭션
	 * @param menu_num 메뉴 번호
	 * @return 성공여부 실패0, 성공1
	 */
	public int setOrder(int menu_num, int mem_cart);

	/**
	 * 회원 휴대폰 번호를 통해 회원 장바구니 조회하는 메서드 getMemCart
	 * @param mem_phone 회원 휴대폰 번호 (중복없음)
	 * @return 회원 장바구니 상세 정보 ORDER_NUM, MENU_NAME, ORDER_COST, ORDER_DATE
	 */
	public MemCart_DTO getMemCart(String mem_phone);

	/**
	 * 옵션 추가 (제품타입1:음료를 선택했을 때만 사용되는 메서드) setOption
	 * @param opt_num 옵션 번호 
	 * @return 성공여부 실패0, 성공1
	 */
	public int setOption(int menu_num, int opt_num);
	
	/**
	 * 옵션 추가가 존재할 시 주문서에 옵션 추가 업데이트 setOptoOrder
	 * @param order_num 주문 번호
	 * @return 성공여부 실패0, 성공1
	 */
	public int setOptoOrder(String order_num);
	
	/**
	 * 모든 옵션 조회
	 * @return 모든 메뉴 조회 java.util.List<Optional_DTO>
	 */
	public List<Optional_DTO> getAllOpt();
}