카테고리 없음

[TIL] 트러블슈팅 - 커머스 플랫폼

mooncommit 2026. 4. 2. 10:22

1. 스코프 문제 - 블록 안에서 선언한 변수는 밖에서 못 쓴다

🕶️ 문제

} else if (categoryNumber >= 0 ...) {
    Category selectCategory = categoryList.get(categoryNumber - 1);
}
// ❌ 여기서 selectCategory 사용 불가!
List<Product> productList = selectCategory.getProductList();

else if 블록 안에서 선언한 변수는 블록이 끝나는 순간 사라진다.
블록 밖에서 쓰려고 했더니 오류가 났다.


👓 해결

} else if (categoryNumber >= 0 ...) {
    Category selectCategory = categoryList.get(categoryNumber - 1);
    List<Product> productList = selectCategory.getProductList();
    // ✅ 같은 블록 안에서 사용!
}

변수를 사용할 곳과 같은 블록 안에서 선언해야 한다.


2. 주소값 출력 - 객체를 그냥 출력하면 주소값이 나온다

🕶️ 문제

List<Product> products = category.getProductList();
System.out.println(products); 
// ❌ 출력 결과: [Product@3f99bd52, Product@4f023edb ...]

객체나 리스트를 그냥 println으로 출력하면 주소값이 나온다.


👓 해결

for (Product product : products) {
    System.out.println(product.getProductName()); // ✅ 데이터 출력
}

리스트 안의 데이터를 꺼내려면 for-each문으로 하나씩 꺼내서 메서드로 출력해야 한다.


3. get() 인덱스 - if else 난리치다가 한 줄로 해결

🕶️ 문제

if (categoryNumber == 1) {
    categoryList.get(0);
} else if (categoryNumber == 2) {
    categoryList.get(1);
} else if (categoryNumber == 3) {
    categoryList.get(2);
}
// 카테고리가 늘어날수록 else if도 끝없이 늘어남 😂

👓 해결

 

categoryList.get(categoryNumber - 1);
// ✅ 한 줄로 해결!
입력값과 인덱스 사이에 규칙이 있었다.
1 입력 → get(0)
2 입력 → get(1)
3 입력 → get(2)
항상 -1 차이!  이걸 깨닫는 순간 코드가 확 줄었다.

4. List 타입 혼동 - Category인데 Product를 넣으려 했다

🕶️ 문제

// 의류 상품을 Category로 만들려 했다
Category aloBag = new Category("Alo Bag", 67000, ...); // ❌

Category는 카테고리를 표현하는 클래스인데 상품을 Category로 만들려 했다.


👓 해결

// 의류도 상품이니까 Product로 만들어야 한다
Product aloBag = new Product("Alo Bag", 67000, ...); // ✅

클래스의 역할을 정확히 구분해야 한다:

  • Product → 개별 상품
  • Category → 상품들의 묶음

5. return 여러 개 - 메서드 하나에 return을 여러 개 쓰려 했다

🕶️ 문제

public getList() {
    return name;    // 여기서 끝남
    return price;   // ❌ 실행 안 됨
    return explain; // ❌ 실행 안 됨
}

하나의 메서드에서 여러 값을 한 번에 반환하려 했다.


👓 해결

// 필드마다 getter 메서드를 따로 만들어야 한다
public String getProductName() {
    return productName; // ✅
}

public int getProductPrice() {
    return productPrice; // ✅
}

return은 하나의 메서드에서 하나만 쓸 수 있다.
값마다 getter 메서드를 따로 만들어야 한다.


 

오류가 나도 당황하지 말자. 하나씩 뜯어보면 다 이유가 있다.
튜터님께 배운 오류 검사 방법 "---------------ㅎㅎ"