티스토리 뷰
프로젝트 명세서
상품 관리, 구매 프로그램
<기간>
1. 제작 기간 : 24-03-05 ~ 24-03-15
2. 발표일 : 24-03-18
<주제>
상품 구매, 관리 할 수 있는 프로그램 구현
<기능>
1. 상품관리
- 상품 등록
- 상품 조회
- 상품 수정
- 상품 삭제
2. 상품 구매
- 고객이 상품의 수량을 선택하고 구매 할 수 있음
- 상품을 고객에게 판매하고 판매내역을 구매 DB에 저장
- 상품 구매 시 재고 수량을 감소시키는 기능
- 구매한 상품의 가격 및 수량 정보를 DB에 기록하는 기능
3. 고객 관리
- 신규 고객을 고객DB에 등록(아이디,비번,이름,연락처)
- 기존 고객의 정보를 수정
- 고객 정보 검색
4. 구매 내역 조회 및 관리
- 특정 고객이 구매한 상품을 조회할 수 있는 기능
- 전체 구매 내역을 조회하고 관리
- 시간별, 상품별, 고객별 구매 내역을 검색할 수 있는 기능
<테이블 구조 - DB 테이블>
테이블명 : PRODUCTS - 상품의 기본 정보를 저장
컬럼 :
PRODUCT_ID(NUMBER) : 상품번호 - PK
PRODUCTNAME(VARCHAR2) : 상품 이름 - NOT NULL
PRICE(NUMBER) : 상품 가격 - NOT NULL
STOCK : 상품의 수량 - NOT NULL
테이블명 : PURCHASES - 구매 관리 테이블
컬럼 :
PURCHASE_ID(VARCHAR2) : 구매 Id - PK
CUSTOMER_ID(VARCHAR2) : 고객 Id - FK
PRODUCT_ID(NUMBER) : 상품Id - FK
STOCK(NUMBER) : 구매한 상품의 수량
PURCHASE_DATE(NUMBER) : 구매가 발생한 날짜
테이블명 : CUSTOMERS
컬럼 :
CUSTOMER_ID : 고유한 고객 식별자 - PK
PASSWORD : 고객 비밀번호
CUSTOMER_NAME : 고객의 이름
CONTACT : 고객의 연락처 정보
<데이터 구조 >
- ProductsDTO
productId(int) : 상품번호
productName(String) : 상품이름
price(double) : 상품가격
stock(int) : 상품의 수량
- PurchasesDTO
purchaseId(String) : 구매Id
customerId(String) : 고객Id
productId(int) : 상품번호
stock(int) : 거래된 물품의 수량
purchaseDate(Date) : 구매 날짜
- CustomerDTO
customerId(String)
password(String)
customerName(String)
contact(String)
<클래스 명세서>
ProductDAO : 상품 기능 인터페이스,기능 메서드
ProductDAOImple : 실제 DB에 접근, 상품 데이터를 등록,조회,수정,삭제 처리 (Controller)
ProductMain : 화면에 출력하는 클래스(View)
PurchasesVO : 거래 데이터(생성,조회,수정,삭제) 클래스 (Model)
CustomerVO : 고객 데이터(생성,조회,수정,삭제) 클래스 (Model)
ProductVO : 상품 데이터 클래스(Model)
1. 프로젝트 생성 후 클래스,인터페이스 생성
CustomerVO :고객 데이터(생성,조회,수정,삭제)
VO(Value Object)는 두 객체의 모든 필드 값이 동일하면 두 객체는 같다 간주되는 객체이다.
즉, VO는 객체의 상태를 나타내는 데 사용되며,
객체간의 동등성(equality)을 판단할 때 객체의 내용, 즉 값(value)을 기반으로 한다.
VO는 주로 데이터 전송 객체(DTO)로 사용되며, 데이터의 표현 용도로 사용된다.
따라서 VO의 목적은 객체의 값(value)를 나타내는 것이므로
객체의 상태가 동일하며 동일한 객체로 간주되어야 한다.
이러한 개념을 따르면 VO 클래스는 보통 다음과 같은 특성을 갖는다.
1. 모든 필드는 private 로 선언되어야 한다.
2. 필드에 대한 접근자(getter) , 설정자(setter) 메서드가 제공되어야 한다.
3. equals() 및 hashCode() 메서드가 구현되어야 하며, 필드의 값이 동일한지 비교해야 한다.
4. 가능하면 불변(immutable) 클래스로 만드는 것이 좋다.
package Products;
public class CustomerVO {
private String customerId;
private String password;
private String custormerName;
private String contact;
public CustomerVO() {}
public CustomerVO(String customerId, String password, String custormerName, String contact) {
super();
this.customerId = customerId;
this.password = password;
this.custormerName = custormerName;
this.contact = contact;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCustormerName() {
return custormerName;
}
public void setCustormerName(String custormerName) {
this.custormerName = custormerName;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
@Override
public String toString() {
return "CustomerVO [customerId=" + customerId + ", password=" + password + ", custormerName=" + custormerName
+ ", contact=" + contact + "]";
}
}//end CustomerVO
ProductVO : 상품 데이터 클래스
package Products;
public class ProductVO {
private int productId;
private String productName;
private double price;
private int stock;
public ProductVO() {}
public ProductVO(int productId, String productName, double price, int stock) {
super();
this.productId = productId;
this.productName = productName;
this.price = price;
this.stock = stock;
}
public int getProductId() {
return productId;
}
public void setProductId(int productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
@Override
public String toString() {
return "ProductVO [productId=" + productId + ", productName=" + productName + ", price=" + price + ", stock="
+ stock + "]";
}
}
PurchaseVO : 거래 데이터(생성,조회,수정,삭제)
package Products;
import java.util.Date;
public class PurchaseVO {
private String purchaseId;
private String customerId;
private int productId;
private int stock;
private Date purchaseDate;
public PurchaseVO() {}
public PurchaseVO(String purchaseId, String customerId, int productId, int stock, Date purchaseDate) {
super();
this.purchaseId = purchaseId;
this.customerId = customerId;
this.productId = productId;
this.stock = stock;
this.purchaseDate = purchaseDate;
}
public String getPurchaseId() {
return purchaseId;
}
public void setPurchaseId(String purchaseId) {
this.purchaseId = purchaseId;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public int getProductId() {
return productId;
}
public void setProductId(int productId) {
this.productId = productId;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public Date getPurchaseDate() {
return purchaseDate;
}
public void setPurchaseDate(Date purchaseDate) {
this.purchaseDate = purchaseDate;
}
@Override
public String toString() {
return "PurchaseVO [purchaseId=" + purchaseId + ", customerId=" + customerId + ", productId=" + productId
+ ", stock=" + stock + ", purchaseDate=" + purchaseDate + "]";
}
}
ProductDAO : 상품 기능 인터페이스,기능 메서드
DAO(Data Access Object) 는 실제 DB의 data에 접근하기 위한 객체이다.
- 실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행한다.
- Service와 DB를 연결하는 고리 역할을 한다
- Repository package가 바로 DAO 이다.
* Repository 패턴은 DAO 패턴의 한 종류로, 데이터 저장소를 추상화하여 데이터 액세스를 관리하는 패턴 Repository 패턴에서 데이터 액세스 기능을 제공하는 클래스(여기선 ProductDAOImple)가 Repository 역할을 수행하며, 이 역할을 대부분 DAO 인터페이스와 그 구현체가 수행한다.
* 일반적으로 DAO는 인터페이스로 정의되고, 실제 데이터베이스에 대한 구현은 인터페이스를 구현하는 클래스( ProductDAOImple) 에서 이루어진다.
따라서 DAO 인터페이스를 통해 데이터베이스에 접근하는 코드와 실제 데이터베이스 접근 및 조작 코드를
분리하여 유지보수성과 테스트 용이성을 높일 수 있다.
package Products;
import java.util.ArrayList;
public interface ProductDAO {
// - 상품 등록
public abstract String addProduct(ProductVO product);
// - 특정 상품 조회
public abstract int getProductById(int productId);
// - 상품 수정
public abstract String updateProduct(ProductVO product);
// - 상품 삭제
public abstract int deleteProduct(int product);
// - 상품 전체 조회
public abstract ArrayList<ProductVO> getAllProducts();
}//end ProductDAO
ProductDAOImple : 실제 ProductDB에 대한 구현이 일어나는 클래스
클래스가 인터페이스를 implements 한다는 것은
해당 클래스가 인터페이스에 정의된 모든 메서드를 구현한다는 의미이다.
인터페이스를 implements 함으로써
클래스는 해당 인터페이스가 정의한 규약(메서드의 시그니처)을 따르게 된다.
즉, 인터페이스를 implements 하는 클래스는 인터페이스에서 선언된 모든 메서드를 반드시 구현해야 한다.
아래의 예제에서 MyClass는 MyInterface를 implements 하고 있으며,
따라서 MyClass의 객체를 MyInterface 타입으로 사용할 수 있다.
이것은 클래스의 구현 세부 사항을 감추고 프로그램의 유연성을 높이는 데 도움이 된다.
public interface MyInterface { //인터페이스
void myMethod(); // 인터페이스의 메소드 myMethod
}
public class MyClass implements MyInterface {
@Override
public void myMethod() {
// 인터페이스를 implements 하면 인터페이스의 메소드를 반드시 구현해야함
}
}
public class Main { // 메인
public static void main(String[] args) {
MyInterface obj = new MyClass(); // 다형성(Polymorphism)
obj.myMethod(); // obj 변수는 MyInterface 인터페이스에 정의된 메서드인 myMethod()를 호출할 수 있다
}
}
* ProductDAOImple 클래스에 ProductDAO 인터페이스를 implements 하면
인터페이스에서 선언된 모든 메서드를 반드시 구현해야한다.
이러한 구현을 통해 클래스는 특정한 동작이나 기능을 제공하게 된다.
package Products;
import java.util.ArrayList;
public class ProductDAOImple implements ProductDAO, OracleQuery{
// 상품 구매 기능 구현
@Override
public String addProduct(ProductVO product) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getProductById(int productId) {
// TODO Auto-generated method stub
return 0;
}
@Override
public String updateProduct(ProductVO product) {
// TODO Auto-generated method stub
return null;
}
@Override
public int deleteProduct(int product) {
// TODO Auto-generated method stub
return 0;
}
@Override
public ArrayList<ProductVO> getAllProducts() {
// TODO Auto-generated method stub
return null;
}
}//end ProductDAOImple
'백엔드 교육과정 > 3월' 카테고리의 다른 글
2024.03.11_사이드 프로젝트_백엔드 부분 (0) | 2024.03.12 |
---|---|
2024.03.07_ 사이드 프로젝트 (0) | 2024.03.07 |
사이드 프로젝트 보강 (0) | 2024.03.06 |
사이드 프로젝트 명세서 작성하기 , MVC 구조 필기 (0) | 2024.03.05 |
2024.03.04_ JDBC(insert,select_all,select_by_contactId, update,delete) (0) | 2024.03.04 |