진행중인 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 번호가 무한정으로 늘어나는 현상을 발견
- 1️⃣ 기본 설정 관련

- ② 문제 요구사항 기능구현 누락으로 인하여 재설정 간 while문 내의 for문 동작위치 수정이 필요하여 전반적인 코드 수정이 필요함
- As is : 프로그램 동작이 계속 유지되고 foreach문을 통해 배열 리스트를 출력양식에 맞춰 구성하였었음
1~4번까지 입력했을 때 각 배열에 저장된 값들을 양식에 맞춰 출력되게끔 하는 기능이 누락 되어있었음.
0번을 제외한 나머지 숫자형태를 입력하면 반복문이 계속 실행되며 문제의 요구방향과 맞지않는 논리 오류를 범하게 됨!
- As is : 프로그램 동작이 계속 유지되고 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("[ 실시간 커머스 플랫폼 - 전자제품 ]");
/* 향상된 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)
- IntelliJ에서 원격 Repository 를 만들어 연동시키려는 경우는 아래와 같이 진행해야 함
- 정리
- GitHub 웹에서 시작하면 → 원격 먼저 만들고 로컬이 연결
- IntelliJ에서 시작하면 → 로컬 먼저 만들고 원격이 자동 생성/연결
- 2️⃣ 과제 진행 관련
- ① 입력값을 저장하여 조건문을 실행할 변수 선언이 필요했고, sc.nextint를 두번 받게 되어입력을 다시 요구하는 상황이 계속 반복되어 조건문이 실행이 올바르게 되지 않은 것이었음
+. equals 의 개념은 객체(특히 문자열) 비교에서 주로 사용되는 메서드이므로 int로 변수를 선언한 경우는 바로 사용하지 못하는 것을 인지할 것!
⚠️ 만약 진행하고 싶다면 입력받는 타입을 String으로 대체해서 사용하면 equals를 쓸 수 있음
- 저장된 배열의 번호를 나타내는 변수 index를 반복문마다 초기화되지 않도록 선언해서 발생한 Issue
🙏 반드시 변수 선언의 위치를 꼼꼼히 확인하여 선언하자!
- 저장된 배열의 번호를 나타내는 변수 index를 반복문마다 초기화되지 않도록 선언해서 발생한 Issue
- ② 문제 요구사항을 확실히 인지하고 넘어갈 것 🧐
- 문제의 요구사항인 경우는 1~4번의 값을 각각 숫자에 맞춰 입력하였을 때 상품 한 줄만 출력되도록 구현하는 것이 목적
- while 내 foreach문을 구성하는 것이 아닌 출력기능 메서드를 별도로 구성하도록 수정!
- ① 입력값을 저장하여 조건문을 실행할 변수 선언이 필요했고, sc.nextint를 두번 받게 되어입력을 다시 요구하는 상황이 계속 반복되어 조건문이 실행이 올바르게 되지 않은 것이었음
- 1️⃣ 기본 설정 관련
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 |