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

김재홍님의 프로필 이미지
김재홍

작성한 질문수

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

메서드 시작

메서드 문제와 풀이 2 에서 문제 - 은행 계좌 입출금

작성

·

95

0

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


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

[질문 내용]

public static void main(String[] args) {
        // 초기 은행 계좌
        int balance = 0;
        try{
            while (true) {
                Scanner sc = new Scanner(System.in);
                System.out.println("---------------------------------");
                System.out.println("1.입금 | 2.출금 | 3.잔액 확인 | 4.종료");
                System.out.println("---------------------------------");
                System.out.print("선택: ");
                int option = sc.nextInt();
                switch (option) {
                    case 1:
                        balance = deposit(balance, sc);
                        continue;
                    case 2:
                        balance = withdraw(balance, sc);
                        continue;
                    case 3:
                        System.out.println("현재 잔액: "+balance+"원");
                        continue;
                    case 4:
                        System.out.println("시스템을 종료합니다.");
                        break;
                    default:
                        System.out.println("메뉴에서 값을 선택해주세요.");
                }
            }
        } catch (InputMismatchException e) {
            System.out.println("숫자를 입력해주세요.");
        }
    }
    public static int deposit(int balance, Scanner sc) {
        System.out.print("입금액을 입력하세요: ");
        int amount = sc.nextInt();
        balance += amount;
        System.out.println(amount + "원을 입금하였습니다. 현재 잔액: "+balance);
        return balance;
    }
    public static int withdraw(int balance, Scanner sc) {
        System.out.print("출금액을 입력하세요: ");
        int amount = sc.nextInt();
        if (balance >= amount) {
            balance -= amount;
            System.out.println(amount + "원을 출금하였습니다. 현재 잔액: " +balance);
        } else {
            System.out.println(amount + "원을 출금하려 했으나 잔액이 부족합니다.");
        }
        return balance;
    }

일반적으로 Scanner sc 를 메서드로 넘겨주는 행위를 하지 않는 걸로 아는데, 강의에서 설명해주신 부분 처럼 swich-case 문을 쓸 때처럼 따로 method를 뺄때 sc를 넘기지 않고, 실제 계산하고 출력하는 부분만 method로 만드는게 맞을까요?

답변 2

0

안녕하세요. 김재홍님, 공식 서포터즈 David입니다.

어떤 이유에서 메서드의 파라미터로 Scanner를 넘기지 않는지 조금 더 자세히 말씀해 주실 수 있으실까요?

감사합니다.

0

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

김재홍님의 질문은 메서드에 Scanner 객체를 인자로 넘기는 것이 일반적인지, 아니면 Scanner를 메서드 외부에서 사용 후 결과만 메서드에 넘기는 방식이 좋은지에 대한 고민으로 이해됩니다.

이와 관련하여 유사한 질문 링크를 찾았습니다. 이 링크에서는 조건문과 메서드를 사용하여 입출금 로직을 구현하는 과정에서 Scanner 객체를 메서드 인자로 넘기는 것에 대한 설명이 있습니다.

  • 메서드 문제와 풀이 2 - 해당 게시글에서는 if문을 사용한 예시를 다루고 있으며, Scanner 객체의 사용 방식에 대해서는 직접적인 언급은 없지만, 메서드와 조건문을 활용하는 방법에 대한 논의가 포함되어 있습니다.

입력 객체인 Scanner를 메서드 인자로 넘기는 행위는 특정 상황에서 유용할 수 있습니다. 예를 들어, 입력 처리를 담당하는 메서드가 여러 개 있고, 모든 메서드에서 공통적으로 Scanner 객체를 사용해야 하는 경우, 이 객체를 각 메서드마다 생성하는 것보다 한 번 생성한 뒤 인자로 넘겨주는 것이 자원 사용 측면에서 효율적일 수 있습니다. 그러나, 이것이 항상 최선의 방법은 아니며, 프로그램의 구조와 요구사항에 따라 달라질 수 있습니다.

일반적으로 단일 책임 원칙(Single Responsibility Principle)을 따른다면, 특정 메서드가 입력을 담당하는 로직과 비즈니스 로직(예: 계산, 처리)을 모두 담당하지 않도록 설계하는 것이 좋습니다. 이 경우, 메서드의 역할이 분명해지고, 테스트가 용이해지며, 재사용성이 높아집니다. 따라서 김재홍님의 경우, Scanner를 사용한 입력 처리는 메서드 외부에서 수행하고, 실제 비즈니스 로직 처리에 필요한 값만 메서드 인자로 넘겨주는 방식을 고려해 볼 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김재홍님의 프로필 이미지
김재홍

작성한 질문수

질문하기