🌱 오늘의 주제 : List를 이용한 상점에 판매할 물건 올리기 코드 모음.
🌱 List를 이용한 마켓에 판매할 물건 올리기 코드 모음.
package Map;
// 필드, getter, setter (데이터만 담음)
public class Goods {
// 필드
private String name;
private int price;
private String state;
// 생성자
public Goods(String name, int price, String state) {
this.name = name;
this.price = price;
this.state = state;
}
// getter
public String getName() {
return name;
}
public int getPrice() {
return price;
}
public String getState() {
return state;
}
// setter
public void setPrice(int price) {
this.price = price;
}
public void setState(String state) {
this.state = state;
}
// 오버라이드
@Override
public boolean equals(Object obj) { //equals()의 오버라이딩을 하는 이유 : 원래 equals()는 두 참조변수가 주소값이 같은지를 판단하는 기능만 가능. 그래서, value값을 비교하기 위해서는 오버라이딩하여, 주소가 아닌 객체에 저장된 내용을 비교하도록 변경.
Goods goodsObj = (Goods) obj; // Goods 으로 형변환
return this.getName().equals(goodsObj.getName());
}
@Override
public String toString() {
return "물품명 : " + this.name + ", 가격 : " + this.price + ", 판매상태 : " + this.state + "}";
}
}
package Map;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// 물품 리스트 관리. CRUD 메소드 모음. // 필드, 메소드.
public class Market {
// 필드..?
private List<Goods> goodsList;
// 생성자
public Market() {
this.goodsList = new ArrayList<>();
}
// 상품 추가
public void insert(Goods goods) {
//Iterator 사
// Iterator<Goods> iter = this.goodsList.iterator();
// while (iter.hasNext()) {
// Goods saveGoods = iter.next();
// if (saveGoods.getName().equals(goods.getName())) {
// System.out.println("등록된 상품이 존재합니다.");
// return;
// }
// }
// 위의 코드 대신 아래처럼 검사하려면, Goods의 equals를 오버라이드 해야한다.
if (goodsList.contains(goods)) {
System.out.println("등록된 상품이 존재합니다.");
return;
}
// 판매 상태 유효성 확인
// isValidState 메소드 불러옴.
if (isValidState(goods.getState()) == false) {
System.out.println("판매상태가 유효하지 않습니다.");
return;
}
boolean addResult = this.goodsList.add(goods);
System.out.println(addResult ? "추가되었습니다." : "실패했습니다.");
}
// 상품 출력
public void read() {
if (this.goodsList.isEmpty()) {
System.out.println("비어있습니다.");
return;
}
// 1. Iterator로 돌리면서 출력하기
// Iterator<Goods> iter = this.goodsList.iterator();
// while (iter.hasNext()) {
// Goods goods = iter.next();
// System.out.println("물품명 : " + goods.getName()
// + ", 가격: " + goods.getPrice() + ", 판매상태 : " + goods.getState());
// }
// 2. toString 오버라이드
System.out.println(this.goodsList);
}
// 상품 가격 수정
public void updatePrice(String name, int price) {
boolean exist = false; // 상품 존재여부
Iterator<Goods> iter = this.goodsList.iterator();
while (iter.hasNext()) {
Goods goods = iter.next();
if (goods.getName().equals(name)) {
exist = true;
goods.setPrice(price);
break;
}
}
if (exist == false) {
System.out.println("수정할 상품이 존재하지 않습니다.");
} else {
System.out.println("수정 되었습니다.");
}
}
public void updateState(Goods goods, String state) { // 바꿀 상품명이 들어있는 객체, 변경할 상태값
// 존재하는 상품인지 확인 -> "수정할 상품이 존재하지 않습니다."
if (this.goodsList.contains(goods) == false) {
System.out.println("수정할 상품이 존재하지 않습니다.");
// return; // 반환 타입이 void이기 때문에 안써도 됨.
}
// validation - 판매 유효성 체크
if (isValidState(goods.getState()) == false) {
System.out.println("판매상태가 유효하지 않습니다.");
// return; // 반환 타입이 void 이기 때문에 안써도 됨.
}
Iterator<Goods> iter = this.goodsList.iterator();
while (iter.hasNext()) {
Goods saveGoods = iter.next(); // Goods를 saveGoods의 변수로 훝는다.. 하나씩.. // saveGoods는 여기서 만든 변수임.
if (saveGoods.getName().equals(goods.getName())) {
saveGoods.setState(state); // 매대에 있던 상품이 바로 변경된다.
System.out.println("수정되었습니다.");
}
}
}
// 상품 삭제
public void delete(String name) {
boolean exist = false; // 상품 존재여부
Iterator<Goods> iter = this.goodsList.iterator();
while (iter.hasNext()) {
Goods goods = iter.next(); // goods는 여기서 만든 변수임.
if (goods.getName().equals(name)) {
exist = true; // 동일한 상품이 있으면 true로 변경.
iter.remove(); // goods 대신에 iter를 쓰는 이유는 while문 안에서 goods는 끝나기 때문. 실제로 삭제해야 되는건 Goods안에 있는 것이기 때문에.
break;
}
}
if (exist == false) {
System.out.println("삭제할 상품이 존재하지 않습니다.");
} else {
System.out.println("삭제 되었습니다.");
}
}
// 판매 상태 유효성 확인
private boolean isValidState(String state) {
if ((state.equals("판매중") || state.equals("판매완료") || state.equals("예약중")) == false) {
return false;
}
return true;
}
}// class
package Map;
// '나' 이곳에서 마켓을 통해 물건을 CRUD 할 수 있게 구현!
public class MarketTest {
public static void main(String[] args) {
Goods goods1 = new Goods("신발1", 15000, "판매중"); // 객체 생성
Goods goods2 = new Goods("가방1", 200000, "예약중"); // 객체 생성
Goods goods3 = new Goods("가방2", 200000, "예약중"); // 객체 생성
Market market = new Market(); // 객체 생성
market.insert(goods1);
market.insert(goods2);
market.insert(goods3);
market.read();
market.updatePrice("가방1", 300);
market.read();
market.updateState(goods3, "판매완료");
market.read();
market.delete("가방2");
market.read();
}
}
'Java > List' 카테고리의 다른 글
Java - List가 제공하는 함수 사용하기 (0) | 2023.02.11 |
---|---|
Java - 반복문으로 List 접근하기 (0) | 2023.02.11 |
Java - List 메소드 (0) | 2023.02.11 |
Java - List 초기화, 추가/수정/삭제 (0) | 2023.02.11 |