강의

멘토링

커뮤니티

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

재완님의 프로필 이미지
재완

작성한 질문수

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

문제와 풀이2

JAVA입문 / 메서드편 문제와 풀이2

작성

·

21

0

public class MethodEx4 {
    public static void main(String[] args) {
        // Question
        /*
        은행 계좌 입출금
        - 사용자로부터 계속 입력을 받아 입금와 출금을 반복 수행하는 프로그램을 작성하자.
        - 또한 간단한 메뉴를 표시하여 어떤 동작을 수행해야 할지 선택할 수 있게 하자.
        - 출금시 잔액이 부족하다면 "x원을 출금하려 했으나 잔액이 부족합니다."라고 출력해야 한다.
         */

        // Answer
        Scanner sc = new Scanner(System.in);
        int balance = 0;

        while (true) {
            printMenu();
            int option = sc.nextInt();

            balance = menuExecute(sc, balance, option);
            if (option == 4) {
                break;
            }
        }
    }

    public static void printMenu() {
        System.out.println("----------------------------------------");
        System.out.println("1. 입금 | 2. 출금 | 3. 잔액 확인 | 4. 종료");
        System.out.println("----------------------------------------");
        System.out.print("선택: ");
    }

    public static int menuExecute(Scanner sc, int balance, int option) {
        int amount;

        if (option == 1) {
            System.out.print("입금액을 입력하세요: ");
            amount = sc.nextInt();
            balance += amount;
            System.out.println(amount + "원을 입금하였습니다. 현재 잔액: " + balance);
        } else if (option == 2) {
            System.out.print("출금액을 입력하세요: ");
            amount = sc.nextInt();
            if (balance >= amount) {
                balance -= amount;
                System.out.println(amount + "원을 입금하였습니다. 현재 잔액: " + balance);
            } else {
                System.out.println(amount + "원을 출금하려 했으나 잔액이 부족합니다.");
            }
        } else if (option == 3) {
            System.out.println("현재 잔액: " + balance);
        } else if (option == 4) {
            System.out.println("시스템을 종료합니다.");
            return balance;
        } else {
            System.out.println("메뉴를 잘못 선택하셨습니다.");
        }

        return balance;
    }

}

 

은행 계좌 입출금 문제를 이런 식으로 풀이했습니다. 강사님과 결과는 같지만, 혹시 좋지 않은 코딩인지 궁금합니다.

답변 1

0

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

재완님께서 작성하신 프로그램은 은행 계좌의 입출금 기능을 단계별로 잘 구현하셨습니다. 이 코드는 사용자가 선택한 옵션에 따라 입금, 출금, 잔액 확인, 프로그램 종료를 명확하게 수행합니다. 아래는 몇 가지 개선 사항과 고려할 점에 대한 안내입니다.

  1. 메서드 분리: 각 기능을 별도의 메서드로 분리하면 가독성과 유지보수성이 높아집니다. 예를 들어, 입금과 출금을 각각 deposit()withdraw() 메서드로 분리할 수 있습니다.

  2. 입출력 검증: 규모가 큰 프로그램에서는 사용자의 입력 값에 대한 검증(숫자가 아닌 입력, 음수 입력에 대한 처리 등)이 필요한 경우가 있습니다. 현재 코드는 이러한 상황을 커버하지 않습니다.

  3. 출력 메시지 수정: 출금 시 메시지에서 “원을 입금하였습니다.“라는 부분은 “원을 출금하였습니다.“로 수정해야 맞습니다.

관련된 기존 질문과 답변으로, 이런 질문을 참고해 볼 수 있습니다:

  • 섹션 9, 문제와 풀이 2 질문듧니다. - 이 게시글에서는 if 문을 사용하는 것과 switch 문을 사용하는 것 사이의 차이점에 대해 설명하고 있습니다. 여기서는 가독성을 위해 switch 문을 사용할 것을 권장했지만, if 문도 상황에 따라 적절히 사용될 수 있습니다.

이와 같은 코드 구조와 방법론을 통해서 프로그램의 기능성과 효율성을 고려하는 연습을 할 수 있습니다. 재완님의 코드도 문제 해결을 위한 좋은 접근입니다. 다만, 코드의 개선 가능성과 확장성 등을 고려하여 작성한다면 더 나아질 수 있습니다.

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

재완님의 프로필 이미지
재완
질문자

public class MethodEx4 {
    public static void main(String[] args) {
        // Question
        /*
        은행 계좌 입출금
        - 사용자로부터 계속 입력을 받아 입금와 출금을 반복 수행하는 프로그램을 작성하자.
        - 또한 간단한 메뉴를 표시하여 어떤 동작을 수행해야 할지 선택할 수 있게 하자.
        - 출금시 잔액이 부족하다면 "x원을 출금하려 했으나 잔액이 부족합니다."라고 출력해야 한다.
         */

        // Answer
        Scanner sc = new Scanner(System.in);
        int balance = 0;

        while (true) {
            printMenu();
            int option = sc.nextInt();

            balance = menuExecute(balance, option);
            if (option == 4) {
                break;
            }
        }
    }

    public static void printMenu() {
        System.out.println("----------------------------------------");
        System.out.println("1. 입금 | 2. 출금 | 3. 잔액 확인 | 4. 종료");
        System.out.println("----------------------------------------");
        System.out.print("선택: ");
    }

    public static int menuExecute(int balance, int option) {
        if (option == 1) { // 입금
            balance = deposit(balance);
        } else if (option == 2) { // 출금
            balance = withdraw(balance);
        } else if (option == 3) { // 잔액 확인
            System.out.println("현재 잔액: " + balance);
        } else if (option == 4) { // 종료
            System.out.println("시스템을 종료합니다.");
            return balance;
        } else {
            System.out.println("메뉴를 잘못 선택하셨습니다.");
        }

        return balance;
    }

    public static int deposit(int balance) {
        Scanner sc = new Scanner(System.in);
        System.out.print("입금액을 입력하세요: ");
        int amount = sc.nextInt();
        balance += amount;
        System.out.println(amount + "원을 입금하였습니다. 현재 잔액: " + balance);

        return balance;
    }

    public static int withdraw(int balance) {
        Scanner sc = new Scanner(System.in);
        System.out.print("출금액을 입력하세요: ");
        int amount = sc.nextInt();
        if (balance >= amount) {
            balance -= amount;
            System.out.println(amount + "원을 입금하였습니다. 현재 잔액: " + balance);
        } else {
            System.out.println(amount + "원을 출금하려 했으나 잔액이 부족합니다.");
        }

        return balance;
    }

}

최종적으로 이런 식으로 기능을 더 나누었습니다.

안녕하세요. 재완님, 공식 서포터즈 y2gcoder입니다.

AI 인턴의 피드백대로 메서드를 잘 분리하신 것 같습니다 🙂

감사합니다.

재완님의 프로필 이미지
재완

작성한 질문수

질문하기