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

상우님의 프로필 이미지
상우

작성한 질문수

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

문제와 풀이4

ScannerWhileEx4 질문입니다.

작성

·

196

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

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

[질문 내용]
강사님은 클래스 시작할 때 totalCost만을 변수선언하시고, 계산을 통해 대입을 하셨습니다. 그러나 전sum이라는 변수를 하나 더 선언해서 거기에다가 대입을 해서 프로그램을 짜봤는데요, 강사님이 만든 코드와 제가 만든 코드를 비교했을 때, 변수를 하나 더 선언하게 되면 비효율적인 코드가 될 수 있을까요? 밑에는 제가 짠 코드입니다.


package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx4 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int sum = 0;
        int totalPrice = 0;

        while (true) {

            System.out.println("1: 상품 입력, 2: 결제, 3: 프로그램 종료" );
            int num = scanner.nextInt();
            scanner.nextLine();

            if (num == 1) {
                System.out.print("상품명을 입력하세요: ");
                String name = scanner.nextLine();

                System.out.print("상품의 가격을 입력하세요: ");
                int price = scanner.nextInt();

                System.out.print("구매 수량을 입력하세요: ");
                int quantity = scanner.nextInt();
                sum = price * quantity;

                System.out.println("상품명:" + name + " 가격:" + price + " 수량:" + quantity + " 합계:" + sum);
                totalPrice += sum;

            } else if (num == 2) {
                System.out.println("총 비용: " + totalPrice);
                totalPrice = 0;

            } else if (num == 3) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
                System.out.println("올바른 옵션을 선택해주세요.");
            }


        }
    }
}

 

답변 2

0

안녕하세요. 상우님, 공식 서포터즈 OMG입니다. 

AI 답변으로도 이해가 되실거라 생각합니다 😀

궁금한 사항은 댓글로 남겨주시거나, 추가로 글을 작성해주세요 ^^

감사합니다.

0

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

상우님의 질문은 ScannerWhileEx4 예제에 관한 변수 선언 및 코드 효율성에 대한 것으로 보입니다. 상우님께서는 totalCostsum 두 변수를 사용하여 프로그램을 작성하셨으며, 이 방식이 강사님의 코드와 비교하여 비효율적인지 여부에 대해 궁금해하고 있습니다.

이와 유사한 질문에 대한 답변이 이전에 있었는데, 그 중 하나는 “훈련_문제(ScannerWhileEx4)”에 대한 것입니다. 이 게시물에서 다룬 질문은 if문 대신 switch문을 사용하여 문제를 해결할 수 있는지에 대한 것이었고, 이는 구조적으로 상우님 질문의 기반이 되는 로직 처리 방식과 관련이 있습니다. 아래는 그 답변입니다:

안녕하세요. Go1님, 공식 서포터즈 OMG입니다.

네, switch로도 가능합니다 ^^

아래 코드를 참고해주세요 😀

while (true) {
    System.out.println("1: 상품 입력, 2: 결제, 3: 프로그램 종료");
    int option = input.nextInt();

    switch (option) {
        case 1:
            input.nextLine();

            System.out.print("상품명을 입력하세요: ");
            String product = input.nextLine();

            System.out.print("상품의 가격을 입력하세요: ");
            int price = input.nextInt();

            System.out.print("구매 수량을 입력하세요: ");
            int quantity = input.nextInt();

            totalCost += price * quantity;
            System.out.println("상품명:" + product + " 가격:" + price + " 수량:" + quantity + " 합계:" + price * quantity);
            break;
        case 2:
            System.out.println("총 비용: " + totalCost);
            totalCost = 0;
            break;
        case 3:
            System.out.println("프로그램을 종료합니다.");
            return;
        default:
            System.out.println("올바른 옵션을 선택해주세요.");
            break;
    }
}

변수의 수와 코드의 효율성에 대해 상우님의 질문에 직접 대답하자면, 변수 sum을 사용하여 각 판매행위 후의 상품 가격과 수량의 곱을 저장하고, 이를 totalPrice에 누적시키는 방법은 코드의 가독성과 유지 보수성을 높일 수 있는 합리적인 접근법일 수 있습니다. 특히, 각 거래의 소계(sum)를 저장함으로써 코드의 명확성을 높이고, 미래의 요구사항 변경(예를 들어, 각 거래의 소계를 별도로 기록하거나 확인해야 하는 경우)에 유연하게 대응할 수 있습니다.

다만, 간단한 프로그램에서는 sum 변수 없이 직접 totalPrice += price * quantity;와 같이 처리해도 코드의 성능이나 효율성에 큰 차이를 미치지 않습니다. 변수를 추가하는 것이 항상 비효율적이라기보다는 상황과 요구에 따라 적절히 선택해야 하는 문제입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

상우님의 프로필 이미지
상우

작성한 질문수

질문하기