
1. CartItem 도입

CartItem 도입으로 인해서 Cart의 코드가 깔끔해지고 이용? 하기 편해졌다. 굳이 이걸 따로 만들어서 왜 사용하는거지? 라는 생각이 들었는데 만드니 편했다.
2. 관계 정리
public void start(Cart cart){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("[ 실시간 커머스 플랫폼 - "+ this.name +" ]");
// 100만원 필터
System.out.println("[ 100만원 이하 상품 목록 ]");
productList.stream()
.filter(p -> p.getPrice() <= 1_000_000)
.forEach(p -> System.out.println(p.getMySimpleInfo()));
System.out.println();
System.out.println("[ 100만원 이상 상품 목록 ]");
productList.stream()
.filter(p -> p.getPrice() >= 1_000_000)
.forEach(p -> System.out.println(p.getMySimpleInfo()));
System.out.println("0. 뒤로가기");
Integer result = 0;
try {
result = sc.nextInt();
if (result == 0){break;}
} catch (InputMismatchException e) {
System.out.println("값이 잘못 입력되었습니다.");
sc.next();
continue;
}
if (result>0 && productList.size()+1 > result){
System.out.println(productList.get(result-1).getMyInfo());
}else{
System.out.println("없는 번호 입니다.");
continue;
}
Product select = productList.get(result-1);
Integer buy = 0;
// 구매 > 재고
System.out.printf("몇개 구매 하시겠습니까?: ");
if (buy > select.getCount()){
System.out.println("재고 보다 많은 양을 입력하였습니다.");
continue;
}
// 문자 입력
try {
buy = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("값이 잘못 입력되었습니다.");
sc.next();
continue;
}
cart.addCartItemList(select,buy);
}
}
원래 코드에서는 객체를 여러번 넣어서 아이폰 객체 3개를 Cart에 넣고 그 아이폰이 몇개 인지 세는 구조
(아이폰, 아이폰, 아이폰) 이렇게 저장
수정 한 코드에서는 아이폰을 몇개 넣을 건지 quantity(수량)을 입력 받고 객체의 이름의 갯수를 입력 받아 Cart에 넘겨 주는 형식 이다.
(아이폰, 3) 이제는 이렇게 저장
아이폰 담기-> 노트북 담기-> 아이폰 담기
이렇게 해도 이제 아이폰 합계로 저장
3. 테스트 케이스


관리자 시스템은 무리 없이 완성 했습니다.
드디어 이것 때문에 포기 하지 않고 계속 진행 하였습니다.
람다 스트림을 너무 써보고 싶어서 끝까지 진행했습니다.
계산기 때는 이해도 못하고 잘 못해서...
BF
for (int index = 0; index < productList.size(); index++) {
System.out.println(index + 1 + ". " + productList.get(index).getMySimpleInfo());
}
AF
productList.stream()
.forEach(p -> System.out.println(p.getMySimpleInfo()));
BF 없음 AF 추가
// 100만원 필터
System.out.println("[ 100만원 이하 상품 목록 ]");
productList.stream()
.filter(p -> p.getPrice() <= 1_000_000)
.forEach(p -> System.out.println(p.getMySimpleInfo()));
System.out.println();
System.out.println("[ 100만원 이상 상품 목록 ]");
productList.stream()
.filter(p -> p.getPrice() >= 1_000_000)
.forEach(p -> System.out.println(p.getMySimpleInfo()));
BF
// 삭제된 상품이 장바구니에 있다면 장바구니에서도 제거
// public void removeProductName(String name){
// for (int i=0; i<cartItemList.size(); i++){
// if(cartItemList.get(i).getProduct().getName().equals(name)){
// cartItemList.remove(i);
// }
// }
// }
AF
// 스트림 필터로 제거
public void removeProductName(String name){
cartItemList = cartItemList.stream()
.filter(item -> !item.getProduct().getName().equals(name))
.collect(Collectors.toList());
}
어찌저찌 커머스 과제를 마치며...(느낀점)
이번 커머스 과제를 진행하면서 클래스를 불러오고 클래스 안에서 메서드들을 만들면서 실행 코드? 같은 곳에서 메서드를 집어넣어서 짧게 만들고 이런 재미가 많이 있었습니다. 조립식 구조같이 생겨서 풀면서 계속 생각을 했습니다.
제가 발제 필수 부분을 처음부터 끝까지 6~7번 전부 지우고 작성해 봤습니다. 자바 구조를 잘 모르고 이해가 안 가서. 근데 이제 조금 알 것 같습니다. 도전1번은 한 2번?
드디어 람다, 스트림을 적용해봐서 목표는 성취한 것 같습니다. 다만 제네릭을 사용 못 해봐서 아쉬운데 기회가 생기겠죠?
아직 수정할 부분이 많긴 합니다. 스트림을 적용 했는데 제품 앞에 번호가 다 날라가서 선택을 임의로 해야 합니다.

이런 식으로 제품 번호가 안나와서...
커머스 발제가 마무리된 지 좀 됐는데 저는 계속 만들고 있긴 했습니다... 그래도 스프링 들어가기 전에 목표는 달성해서 기분이 좋긴 합니다!!