인프런 커뮤니티 질문&답변

김대경님의 프로필 이미지
김대경

작성한 질문수

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

정리

코드에 대한 피드백 부탁드립니다.

작성

·

214

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.package array; import java.util.Scanner; public class ArrayEx10_1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] productName = new String[10]; int[] productPrice = new int[10]; int productCount = 0; while (true) { System.out.println("1. 상품 등록 | 2. 상품 삭제 | 3. 상품 목록 | 4. 종료\n메뉴를 선택하세요." ); String options = scanner.nextLine(); if (options.equals("1") && productCount < 10) { System.out.print("상품 이름을 입력하세요: "); productName[productCount] =scanner.nextLine(); System.out.print("상품 가격을 입력하세요: "); productPrice[productCount] =scanner.nextInt(); productCount++; scanner.nextLine(); } else if (options.equals("1") && productCount == 10) { System.out.println("더 이상 상품을 동록할 수 없습니다."); } else if (options.equals("2") && productCount > 0) { for (int i = 0; i < productCount; i++) { System.out.println((i+1) + ". "+ productName[i] + ": " + productPrice[i] + "원"); } System.out.println("삭제할 품목의 번호를 입력해주세요."); int delNum = scanner.nextInt(); if ((delNum-1) < productCount) { productName[delNum-1] = null; productPrice[delNum-1] = 0; productCount--; System.out.println(delNum + "번 품목이 삭제되었습니다."); scanner.nextLine(); } else { System.out.println("올바른 품목의 번호를 입력해주세요."); scanner.nextLine(); } } else if (options.equals("2") && productCount == 0) { System.out.println("삭제할 품목이 없습니다."); } else if (options.equals("3") && productCount > 0) { for (int i = 0; i < productCount; i++) { System.out.println((i+1) + ". "+ productName[i] + ": " + productPrice[i] + "원"); } } else if (options.equals("3") && productCount == 0) { System.out.println("등록된 상풍이 없습니다."); } else if (options.equals("4")) { System.out.println("프로그램을 종료합니다."); break; } else { System.out.println("올바른 메뉴를 선택해주세요."); } } } }실습을 하다가 삭제기능도 있었으면 해서 만들어 봤습니다.우선, 강의를 봤을 때와 조금 다르게 만든거 같구요. 메뉴를 선택할 때 글자를 넣으면 오류가 떠서 스트링형으로 바꿨습니다.
위 코드에서 가독성 측면이나 중복 등 피드백 가능하실까요...?또 추가로 강사님이었으면 어떻게 하셨을 것 같나요??

답변 1

1

안녕하세요, 인프런 AI 인턴입니다.

제공해주신 코드를 보면 여러 면에서 유용하고 학습 목적에 맞게 잘 작성하신 것 같습니다. 다만, 가독성과 중복 최소화를 위해 몇 가지 제안을 드리겠습니다.

  1. 메뉴 선택 부분을 별도의 메소드로 분리할 수 있습니다. 이렇게 하면 main 메소드의 길이를 줄이고, 코드의 가독성을 향상시킬 수 있습니다.

  2. 상품 관련 기능(등록, 삭제, 목록 조회) 또한 각각 별도의 메소드로 분리할 수 있습니다. 이는 기능별 책임을 분리하고, 재사용성과 가독성을 높이는 데 도움이 됩니다.

  3. 입력 오류를 처리하는 로직을 추가하여 사용자가 숫자 대신 문자를 입력했을 때의 상황을 더 명확히 처리할 수 있습니다.

  4. 상품 삭제 기능에서 상품을 삭제한 후에는 그 뒤의 상품들을 앞으로 당겨야 합니다. 현재 로직에서는 삭제된 항목의 공간을 null로 남기고 있어, 상품 목록의 연속성에 문제가 생길 수 있습니다.

절차지향적으로 작성된 이 코드를 객체지향적인 방법으로 리팩토링하는 것도 한 가지 방법이 될 수 있습니다. 예를 들어, Product라는 클래스를 만들어 상품 정보를 관리하고, ProductManager 같은 클래스에서 상품 등록, 삭제, 조회 기능을 관리하도록 하는 것입니다. 이렇게 구조를 변경하면 코드가 더 유연하고 확장 가능해집니다.

강의 내용과 질문하신 내용이 직접적으로 일치하지 않기 때문에, 구체적으로 강사님께서 어떻게 하셨을지는 정확히 말씀드리기 어렵습니다. 하지만 위에서 제안드린 방법들은 일반적으로 코드의 구조와 가독성을 개선하는 데 도움이 될 것입니다.

김대경님의 프로필 이미지
김대경
질문자

고맙읍니다

 

김대경님의 프로필 이미지
김대경

작성한 질문수

질문하기