이전 계산 과제를 진행하면서 객체지향적 사고에 첫걸음을 내딛었다.
이번에는 커머스 과제를 진행하면서 객체지향적사고와 공부가 필요한 부분에 대해서 기술 할 예정이다.
문제
상품 목록 출력 시 정렬이 맞지 않아 가독성이 떨어짐
해결
printf 포맷을 활용하여 정렬 및 형식 통일
%d : 정수 출력 %s : 문자열 출력 %-15s : 문자열 왼쪽 정렬 %,d : 천 단위 콤마 %n : 줄바꿈 👉 다양한 형식으로 출력을 나타낼 수 있다는 걸 배웠고 아래 링크에 정리하였다.
👉 자세한 내용 (링크 첨부)
https://velog.io/@gpekd5/Java-%EB%AC%B8%EB%B2%95-printf
문제
숫자를 입력해야 하는 상황에서 문자 입력 시 프로그램이 종료됨
원인
Scanner.nextInt() 사용 시 InputMismatchException 발생
해결
try-catch로 예외 처리 후
sc.nextLine()으로 입력 버퍼 초기화
👉 예외처리를 하지 않으면 프로그램이 종료 될 가능성이 높기에 항상 인지를 하고 있어야겠다. 단순하게 Exception 키워드처럼 나타낼게 아니라 정확한 디버깅과 추적을 위해 다양한 예외의 종류를 아래 링크에 정리하였다.
👉 자세한 내용 (링크 첨부)
https://velog.io/@gpekd5/Java-%EB%AC%B8%EB%B2%95-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%AC-try-catch
문제
final을 어디에 써야 할지 명확한 기준 없이 사용
해결
“변하지 않는 값에 사용한다”는 기준을 다시 정리
👉 무조건 사용하는 것이 아니라, 목적에 맞게 사용하는 것이 중요!!!!!
final 키워드에 대한 간단한 정리를 아래 링크로 첨부하였다.
👉 자세한 내용 (링크 첨부)
https://velog.io/@gpekd5/Java-%EB%AC%B8%EB%B2%95-final-%ED%82%A4%EC%9B%8C%EB%93%9C
문제
상품, 장바구니, 수량을 하나의 흐름으로 처리하려다 구조가 꼬임
원인
각 클래스의 책임(역할)에 대한 이해 부족
해결
역할 기준으로 객체 분리
Product : 상품 정보CartItem : 상품 + 수량Cart : 장바구니 관리Category : 카테고리 및 상품 목록👉 객체지향은 데이터를 나누는 것이 아니라 역할을 나눠서 유지보수가 편할 수 있게 개발자가 수정을 원활하게 할 수 있도록 해야겠다는 것을 느꼈다. 또한 처음 구조설계?를 하는 것이 어려운 것 같다.
문제
관리자에서 상품 삭제 시
카테고리에서는 삭제되지만 장바구니에는 남아있는 문제 발생
원인
CommerceSystem과 Admin이 각각 다른 Cart 객체를 사용
→ 서로 다른 장바구니를 보고 있었음
→ cartItems.size()가 0으로 나오는 현상 발생
해결
Cart 객체를 하나만 생성하고
Admin에 전달하여 동일 객체를 공유하도록 수정
private final Cart cart = new Cart();
private final Admin admin = new Admin(categories, cart);
👉 동일한 데이터를 여러 객체에서 따로 관리하면 데이터 불일치 문제가 발생해서 예상치 못한 프로그램 오류가 발생한다. 따라서, 구조 관계를 잘 이해하고 해야할 것 같다.