기능별 클래스/인터페이스 생성
DTO(Data Transfer Object)
- 각 계층간 데이터 운반을 위한 객체
- 로직을 갖지않는 데이터 객체
- 생성자, 데이터 접근을 위한 getter/setter로 이루어짐
Product
public class Product{
private int no;
private String name;
private int price;
// 생성자
public Product() {}
// getter, setter메서드
public int getNo(){
return no;
}
public void setNo(int no){
this.no = no;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getPrice(){
return price;
}
public void setPrice(int price){
this.price = price;
}
}
Controller
- 사용자의 request를 직접 처리
- 사용자가 원하는 기능을 입력받아 Service로 넘김
Store APP
/* 주요부분 외 나머지 생략 */
public class StoreApp{
public satatic void main(String[]args){
// 상품관리 기능 로직이 구현된 ProductService의 객체 구현
private ProductService service = new ProductService();
Scanner scan = new Scanner(system.in)
while(true){
System.out.println("============================");
System.out.println("1. 상품조회")
System.out.println("============================");
System.out.print("번호 입력: ")
int menuNo = scan.readInt();
if(menuNo == 1){
System.out.println("1. 상품조회")
service.getAllProducts();
}
}
}
Service
- Controller에서 요청한 기능에 적절한 DAO를 가져와 처리
- DAO를 통해 DB에 접근하고 DTO를 통해 데이터를 전달함
public class ProductService{
private ProductDao productDao = new ProductDao();
public getAllproducts(){
Product product = productDao.SelectAllProducts();
return product;
}
}
DAO(Data Access Object)
- 데이터 베이스에 연결하여 CRUD작업 수행
- 작업량을 효율적으로 분배하기 위해 DB와 연결하는 객체를 따로 만들어 관리
ProductDao
public class ProductDao{
public List<Product> SelectAllProducts() throws SQLException{
List<Product> products = new ArrayList<>();
String sql = "select product_no, product_price, product_discount_price, product_name "
+ "from tb_sample_products "
+ "order by product_no desc ";
Connection connection = getConnection();
PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
Product product = new Product();
product.setNo(rs.getInt("product_no"));
product.setPrice(rs.getInt("product_price"));
product.setDiscountPrice(rs.getInt("product_discount_price"));
product.setName(rs.getString("product_name"));
products.add(product);
}
rs.close();
pstmt.close();
connection.close();
return products;
}
}
참고
VO(Value Object)
- 내용물이 값 자체를 의미하기 때문에 readonly
- 값이 불변적