[JAVA 실습] 커머스 과제 (심화)

2025. 9. 24. 20:52·JAVA/Java 실습

필수기능 과제 수행 간 작성했던 트러블슈팅 링크

진행중인 GitHub Repository 링크

 

GitHub - sjww0604/CommerceProject: 커머스 과제 구현 레포지토리입니다.

커머스 과제 구현 레포지토리입니다. Contribute to sjww0604/CommerceProject development by creating an account on GitHub.

github.com

 


☠️트러블 슈팅

  • 발생한 Issue
    • 1️⃣ 기본 설정 관련
      • ① 필수기능 진행 이후 기본적인 코드 리팩토링 과정에서 메서드명, 변수명 선언부를 수정하다 코드가 꼬여버리는 상황이 발생
        • 리팩토링을 하고자 했던 주 목적
          : 가독성 및 유지보수성을 향상시키고 싶었고, 비즈니스 로직 클래스에 다양한 기능들이 추가되다보니 사용한 메서드,변수명, 클래스 명등이 명확하게 구분되지 않고 혼선을 일으킬 가능성이 높아서 이를 해소하고자 했음 
      • 병렬 배열 → 단일 배열로 수정하는 과정 중 인덱스 값 관리 실수 발생
        • Index Mismatch 로 인해 특정 상품을 장바구니에 추가하는 과정중 화면이 노출되지 않는 상황 발생 
    • 2️⃣ 과제 진행 관련
      • ① 고객 정보(Customer) 클래스를 역할 분리하는 과정에서 어느정도의 역할을 비즈니스 로직 클래스(CommerceSystem)과 나눠야 할 지 혼선이 많았음
        • 관리자 메뉴 번호 충돌
          : displayMainMenu 화면에서 관리자 모드 메뉴를 추가하여 화면에 노출했으나 실질적인 기능은 showCart(), order() 메서드를 불러와 화면구성과 접근 로직이 잘못되는 형태가 있었음 

관리자 모드 접근 시 관리자 로그인 계정을 입력하도록 해야하나 기존에 구성했던 장바구니 주문확인 화면이 나오고 있다.

  • ② 관리자모드 - 상품 추가 입력화면 조건부 불만족
    : 메뉴 기능을 접근하고 입력 폼을 받아오게끔 구현한 와중에 공백값 검증을 위한 isempty() 문이 기본적으로 먼저 실행되는 이슈가 발생 
    private Product productForm() {
        System.out.print("상품명: ");
        String name = sc.nextLine().trim();
        while (name.isEmpty()) {
            System.out.print("입력값은 공백일 수 없습니다. 다시 입력: ");
            name = sc.nextLine().trim();
        }
        
 // 상품명을 입력하기도 전에 재입력을 요청하는 출력문이 나오게 되는 이슈

 

  • ③ String.format 할인 % 양식을 진행하다 발생한 UnknownFormatConversionException로 인해 문자열이 정상적으로 출력되지 않는 상황 발생

 


  • 해결방법 / 찾아본 내용
    • 1️⃣ 기본 설정 관련
      • ① 병렬 배열로 관리함에 따라 발생할 수 있는 인덱스 관리 이슈들에 대해서 해소가 필요했음 
        • 일부 메서드가 이전 병렬 배열 기준의 인덱스를 참고함에 따라서 조회하고 반환하는 값들이 달라 오류가 발생했음
        • 설정해놓은 기능별로 클래스를 올바르게 호출하는지 단계별 점검 및 실행과정을 통해서 컴파일 단계의 오류였는지, 실행 이후 단계의 오류인지(출력을 해야하나 실행은 되고 출력은 안나오는 상황) 점검하고 수정해 나아감
    • 2️⃣ 과제 진행 관련
      • ① 클래스 파일의 목적에 맞게 아래와 같이 정리하여 진행하고자 했음 
        • Customer.java = 데이터/역할(권한) 보유
        • CommerceSystem = 메뉴 흐름/ 비즈니스 규칙
          → 실습과정에서는 중첩 클래스로 구성하여 활용하는 것이 직관적이지만 과제에서 요구하는 추가기능들 그리고, 그 기능들을 묶어 새로운 클래스로의 확장을 위해 파일을 분리하여 진행하고자 했음

        • 관리자 메뉴 번호 충돌
          • start() 메서드에서 메뉴 번호를 고정한 형태로 되어 있어 displayMainMenu에서 보여주는 메뉴 순번과 실제 동작되는 기능의 순번이 전부 고정되어 있었던 이슈
          • 사용자의 입력값에 따라 로직을 수행하던 개념에서 장바구니의 보유 여부에 따라 showCart() / order() 흐름이 아예 실행되지 않고 정상적으로 관리자모드로 진입할 수 있도록 수정하였음

상세 페이지 구현은 아직 못했으나 원하는대로 관리자 모드 진입시 접근했다는 흐름을 확인할 수 있음

 

장바구니에 상품이 담겼을 때 정상적으로 메뉴 순번이 올바르게 나타나고, 각 기능에 올바르게 접근함을 확인

  • ② 관리자모드 - 상품 추가 입력화면 조건부 불만족
    : 해당 이슈는 선행과정(관리자 모드 메뉴 진입 및 카테고리 선택과정에서 숫자를 입력해 화면을 진입함) 에서 nextInt()가 엔터를 처리하지 못해서 발생한 이슈
    • nextInt() 는 정수만 읽고, 엔터(개행문자) 는 버퍼에 그대로 남아있게 됨 
    • 그 다음 줄에서 nextLine()을 호출하면, 버퍼에 남아 있는 엔터(\n) 를 그대로 읽어와서 **빈 문자열(””)**을 반환해버리는 상황
    • 이로 인해 isEmpty() 조건이 만족하게 되면서 오류일때 실행되어야 할 출력문 및 입력요청이 실행되게 된 것
      → 이로 인해 우선적으로 nextInt() 를 사용한 이후에 nextLine() 으로 버퍼로 남아있는 엔터값을 처리하도록 임시 조치를 진행했음 
      → 최종적으로는 두가지 방법으로 해당 이슈를 간단하게 해소할  수 있는 것으로 보임 (진행 예정! )
      • 전부 nextLine()으로 받고 parseInt() : 문자열로 우선 받고 숫자로 바꾸는 방식 
      • 또는 readIntSafely() 같은 헬퍼로 nextInt() 뒤 개행을 항상 소비 : 
  • ③ UnknownFormatConversionException의 경우는 포맷 문자열에 잘못된 %가 들어갔을 때 나오는 예외 오류
    • 할인율(%) 를 표시하려는 형태였는데 만약 %라는 글자를 보여주고 싶다면 %% 형태로 선언해야 오류를 방지할 수 있음
    • 할인율의 경우는 보통 %의 형태로 저장하지 않고 연산처리를 위해 소수 형태로 구성하니 나의 경우는 %0f%% 형태로 선언하여 깔끔한 정수 느낌의 퍼센트로 나타내게끔 수정해 문제를 해결했음
    • → 지금은 연습차원에서 String.format 을 지속적으로 사용했으나 리팩토링 과정에서는 printf로 코드를 깔끔하게 구성하는 방법도 연습해볼 필요가 있음

'JAVA > Java 실습' 카테고리의 다른 글

[JAVA Algorithm] 커머스 과제 알고리즘 기능 구현  (0) 2025.10.13
[Java Algorithm] 거스름돈 문제 풀이 예시 따라가보기  (0) 2025.09.29
[JAVA 실습] 객체지향 커머스 과제  (0) 2025.09.22
Lv3. Enum, 제네릭, 람다 & 스트림을 이해한 계산기 만들기  (0) 2025.09.18
[JAVA] 계산기 과제 개념 추가 정리  (0) 2025.09.16
'JAVA/Java 실습' 카테고리의 다른 글
  • [JAVA Algorithm] 커머스 과제 알고리즘 기능 구현
  • [Java Algorithm] 거스름돈 문제 풀이 예시 따라가보기
  • [JAVA 실습] 객체지향 커머스 과제
  • Lv3. Enum, 제네릭, 람다 & 스트림을 이해한 계산기 만들기
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java 문법기초
    네트워크 기초
    Stomp
    for문
    git
    프로세스와 쓰레드
    Til
    WebSocket
    HTML&CSS
    백엔드 기초다지기
    RestTemplate
    객체지향프로그래밍
    thymleaf
    java
    BEAN
    실시간 데이터 처리
    웹소켓
    경합조건과 교착상태
    다형성
    MVC
    SpringSecurity
    jsp
    Spring
    객체지향
    Github
    Spriingboot
    JPA
    String.format
    백엔드 기초
    algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[JAVA 실습] 커머스 과제 (심화)
상단으로

티스토리툴바