[JAVA 실습] 객체지향 커머스 과제

2025. 9. 22. 21:14·JAVA/Java 실습

진행중인 GitHub Repository 링크

 

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

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

github.com


☠️ 트러블 슈팅

  • 발생한 Issue
    • 1️⃣ 기본 설정 관련
      • IntelliJ에서 원격 레포지토리 생성하여 Push까지 기능구현이 되도록 해보려 했으나 Commit & Push까지 진행했음에도 GitHub에 연동되지 않는 이슈가 있었음
    • 2️⃣ 과제 진행 관련

    • ① 향상된 for문 구성 이후 0을 입력받았을 때 반복문 및 프로그램이 종료될 수 있도록 구현하는 과정 중 0을 입력해도 종료되지 않는 이슈가 발생
      • ➕ 조건문 수정 이후에 0이 아닌 다른 값을 입력했을 때 index 번호가 무한정으로 늘어나는 현상을 발견 

  • ② 문제 요구사항 기능구현 누락으로 인하여 재설정 간 while문 내의 for문 동작위치 수정이 필요하여 전반적인 코드 수정이 필요함
    • As is : 프로그램 동작이 계속 유지되고 foreach문을 통해 배열 리스트를 출력양식에 맞춰 구성하였었음
      1~4번까지 입력했을 때 각 배열에 저장된 값들을 양식에 맞춰 출력되게끔 하는 기능이 누락 되어있었음.
      0번을 제외한 나머지 숫자형태를 입력하면 반복문이 계속 실행되며 문제의 요구방향과 맞지않는 논리 오류를 범하게 됨!
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 속성
        Scanner sc = new Scanner(System.in);
        List<Product> productsList = new ArrayList<>();

        // 생성자
        productsList.add(new Product("Galaxy S25", 1200000, "최신 안드로이드 스마트폰", 0));
        productsList.add(new Product("iPhone 16", 1350000, "Apple의 최신 스마트폰", 0));
        productsList.add(new Product("MackBook Pro", 2400000, "M3 칩셋이 탑재된 노트북", 0));
        productsList.add(new Product("Airpods Pro", 350000, "노이즈 캔슬링 무선 이어폰", 0));


        // 기능
        System.out.println("[ 실시간 커머스 플랫폼 - 전자제품 ]");

        /* 향상된 for문으로 배열에 추가된 값을 처음부터 끝까지 반복해서 탐색하도록 설정 */
        boolean mainStatus=true;
        while (mainStatus) {
            int index = 1; // 저장된 배열의 순서번호를 쓰기 위해 선언
            for (Product product : productsList) {
                /* String.format을 활용한 자릿수 및 단위 표현 기능 추가
                * %-15s : 고정폭 15만큼 설정, 왼쪽 정렬로 나타냄
                * %,10d : 고정폭 10만큼 설정, 자릿수 , 표현 및 원 단위 붙이기 (Decimal 십진수의 글자를 딴 표현형태)
                * %s : 문자형(String)으로 표현*/
                String productResultList = String.format("%d. %-15s | %,10d원 | %s", index++, product.getPdName(), product.getPdPrice(), product.getPdDescription());
                System.out.println(productResultList);
            }
            System.out.println("0. 종료 | 프로그램 종료");
            int choice = sc.nextInt(); // 메뉴 선택한 값을 저장하는 변수 선언
            if (choice == 0) {
                mainStatus=false; // 종료인 경우 상태값을 저장하는 mainStatus를 false로 설정 while문을 탈출
                }
        } System.out.println("커머스 플랫폼을 종료합니다.");
    }
}

 

  • 해결방법 / 찾아본 내용
    • 1️⃣ 기본 설정 관련
      • IntelliJ에서 원격 Repository 를 만들어 연동시키려는 경우는 아래와 같이 진행해야 함
        • ① 로컬 프로젝트를 생성하고 터미널에서 git init 실행 또는 메뉴 상단 VCS → Enable Git
        • ② git branch -m main (브랜치 분기점 생기지 않도록 main으로 확인차 한번 더 설정)
        • ③ IntelliJ 메뉴 상단 Git-GitHub- Share Project on GitHub → 자동으로 GitHub 원격 생성 + 연결
        • ④ 첫 커밋 후 Push (Commit & Push)
    • 정리
      • GitHub 웹에서 시작하면 → 원격 먼저 만들고 로컬이 연결
      • IntelliJ에서 시작하면 → 로컬 먼저 만들고 원격이 자동 생성/연결
    • 2️⃣ 과제 진행 관련
      • ① 입력값을 저장하여 조건문을 실행할 변수 선언이 필요했고, sc.nextint를 두번 받게 되어입력을 다시 요구하는 상황이 계속 반복되어 조건문이 실행이 올바르게 되지 않은 것이었음

        +. equals 의 개념은 객체(특히 문자열) 비교에서 주로 사용되는 메서드이므로 int로 변수를 선언한 경우는 바로 사용하지 못하는 것을 인지할 것!
        ⚠️ 만약 진행하고 싶다면 입력받는 타입을 String으로 대체해서 사용하면 equals를 쓸 수 있음
        • 저장된 배열의 번호를 나타내는 변수 index를 반복문마다 초기화되지 않도록 선언해서 발생한 Issue
          🙏 반드시 변수 선언의 위치를 꼼꼼히 확인하여 선언하자!  
      • ② 문제 요구사항을 확실히 인지하고 넘어갈 것 🧐
        • 문제의 요구사항인 경우는 1~4번의 값을 각각 숫자에 맞춰 입력하였을 때 상품 한 줄만 출력되도록 구현하는 것이 목적
        • while 내 foreach문을 구성하는 것이 아닌 출력기능 메서드를 별도로 구성하도록 수정!
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 속성
        Scanner sc = new Scanner(System.in);
        List<Product> productsList = new ArrayList<>();

        // 생성자
        productsList.add(new Product("Galaxy S25", 1200000, "최신 안드로이드 스마트폰", 0));
        productsList.add(new Product("iPhone 16", 1350000, "Apple의 최신 스마트폰", 0));
        productsList.add(new Product("MackBook Pro", 2400000, "M3 칩셋이 탑재된 노트북", 0));
        productsList.add(new Product("Airpods Pro", 350000, "노이즈 캔슬링 무선 이어폰", 0));

        System.out.println("[ 실시간 커머스 플랫폼 - 전자제품 ]");
        boolean mainStatus = true;
        while (mainStatus) {
            printProducts(productsList); // 배열 내 저장된 전체 리스트 출력하는 출력 메서드 호출
            System.out.println("0. 종료 | 프로그램 종료");
            int choice = sc.nextInt();

            if (choice == 0){
                mainStatus = false;
                System.out.println("커머스 플랫폼을 종료합니다.");
            } else if (choice >=1 && choice<productsList.size()+1) { //배열의 크기는 입력된 개수의 -1개이므로 저장된 배열값 끝까지 조회하기 위해 +1로 조건문 설정
                Product product = productsList.get(choice-1); // 배열은 0번째부터 저장
                /* String.format을 활용한 자릿수 및 단위 표현 기능 추가
                 * %-15s : 고정폭 15만큼 설정, 왼쪽 정렬로 나타냄
                 * %,10d : 고정폭 10만큼 설정, 자릿수 , 표현 및 원 단위 붙이기 (Decimal 십진수의 글자를 딴 표현형태)
                 * %s : 문자형(String)으로 표현*/
                String productResultList = String.format("%d. %-15s | %,10d원 | %s", choice, product.getPdName(), product.getPdPrice(), product.getPdDescription());
                // 출력 양식을 준수하되 입력값에 따라 저장되어있는 배열 한줄만 나타내기 위해 사용
                System.out.println(productResultList);
                System.out.println("========================================================"); // 1~4번 한줄씩 출력될 때 구분되지 않아 구분선 추가
                System.out.println();

            } else {
                System.out.println("올바른 숫자를 입력하세요! ");
                return; // 배열에 저장된 값 번호를 올바르게 입력하지 않으면 프로그램 종료
            }
        }
    }
        // 기능
        private static void printProducts(List<Product> productsList) {
            for (int i = 0; i < productsList.size(); i++) {
                Product product = productsList.get(i);
                String formatted = String.format( // 출력 양식은 맞추되 저장되어있는 배열 전체 화면 출력을 위한 용도
                        "%d. %-15s | %,10d원 | %s",
                        i + 1,
                        product.getPdName(),
                        product.getPdPrice(),
                        product.getPdDescription()
                );
                System.out.println(formatted);
            }
        }
}

 

💡새로 알게된 내용 또는 개념 (정리중)

  • Java에서의 for문의 개념 4가지 - 작성 완료 ✔️
  • String.format 내용 정리 - 작성 완료 ✔️
  • 배열 형태의 병렬구조 / 단일구조의 차이 및 구성방법 (정리 중)

 

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

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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[JAVA 실습] 객체지향 커머스 과제
상단으로

티스토리툴바