[본캠프] ++

윤영범·2026년 3월 28일

목표

  • 도전과제 기능의 시작인 장바구니 구현
  • 장바구니의 역활에 뭐가 필요한지 설계

요구사항

  • 사용자가 상품 추가 -> 상품선택시 콘솔창아래에 장바구니담기 연결
  • 장바구니 -> product의 상품명,가격,수량 -> 동적으로 추가 및 조회 (스캐너로 입력받아야함)
  • 사용자가 잘못된 선택했을때 예외처리 ( 예: 유효하지않은 상품번호 입력)
  • 상품을 장바구니에 담을때 Product의 amount 체크 재고가 없을경우 경고메세지 출력
  • 주문완료시 Product 의 amount - 1
  • 장바구니 출력 및 금액계산

객체지향을 설계할떄 핵심

나에게 질문해보자

  • 이 프로그램에 어떤 역할들이 있지?
  • 누가 어떤 책임을 가져야 하지?
  • 이 데이터는 누가 관리해야 자연스럽지?

명사와 동사로 나누어보자
명사(클래스)

  • 장바구니
  • 물품
  • 장바구니에 담겨있는 물품
  • 종류
  • 유저

동사 (메소드)

  • 물품을 담는다
  • 상품을 삭제한다
  • 가격을 계산한다

문제점

장바구니 기능을 구현하면서 Cart 클래스에 Product를 어떻게 담아야 할지 고민이 생겼다.

처음에는 다음과 같이 Product의 값을 꺼내서 Cart에 넣으려고 했다.

product.getName()
product.getPrice()

이렇게 값을 따로 넘겨서 Cart를 생성하려고 했는데,
타입 문제도 발생하고 구조적으로도 맞는 방식인지 확신이 없었다.

Cart가 Product를 상속받으면 getter를 같이 쓸 수 있지 않을까 생각했다.

고민했던 부분

Cart에 Product를 쪼개서 넣어야 하는지, 객체 그대로 넣어야 하는지
Cart가 Product를 상속받는 게 맞는 구조인지
ProductList와 CartList와의 관계와 차이점
List에 상품을 추가할 때 중복 상품을 어떻게 처리할지

해결 과정

  1. 객체는 쪼개지 않고 그대로 참조한다
    Product는 이미 이름, 가격 등의 정보를 가지고 있음
    그래서 Cart에서는 값을 복사하지 않고 Product 객체 자체를 참조하는 것이 맞음

결론:

Cart는 Product를 "복사"하는 게 아니라 "참조"한다

  1. 상속이 아니라 포함(참조) 관계가 맞다
    처음에는 Product extends Cart 를 생각했지만
    Cart는 Product가 아니라 “상품을 담는 구조”임

관계 정리:

Cart is a Product (상속) X
Cart has a Product (참조) O

  1. 참조변수 개념 이해
    private Product product;

이 코드는 Product 객체를 직접 저장하는 게 아니라
Product 객체를 가리키는 "참조변수"라는 것을 이해했다.

그래서 Cart.java 클래스내에서

    public String getName()
    {
        return product.getName();
    }

Product.java 에서 사용하는 메소드도 사용가능하다

  1. 장바구니 추가 로직 설계 방향
    Cart.java와 CartList.java의 역활설계를 정확히 맞춰서하자
    Cart.java - Cart안에 상품을 관리한다
    CartList.java - 결제,추가,삭제 Cart를 관리한다
  • 오늘의 핵심 깨달음
    객체지향에서는 데이터를 복사하지 않고 참조하는 것이 중요하다
    상속은 “같은 종류”일 때만 사용해야 한다
    역할이 다른 클래스는 분리해야 한다
    데이터의 주인이 누구인지 항상 생각해야 한다
  • 다음에 고민해볼 것
    장바구니 삭제 기능 설계
    총 가격 계산 책임을 어디에 둘지 고민

느낀점
코드를 짜는시간보다 설계와 고민하는시간이 더 많은거같다
그래도 오늘 컬렉션 로직의 데이터주고받는과정을 공부하면서
Products의 컬렉션과 Cartlist의 연결관계를 정확히깨달은거같다

0개의 댓글