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

Van prime님의 프로필 이미지
Van prime

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 13 질문입니다.

작성

·

171

0

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

        System.out.println("속담 퀴즈입니다. 빈 칸에 알맞은 말을 입력하세요. (주관식)");
        System.out.println("-----------------------------------------------------");

        try (BufferedReader br = new BufferedReader(new FileReader("saying.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
                System.out.print("정답 입력 ==> ");

                String answer = br.readLine();
                String input = sc.next();

                

                if (input.equals(answer)) {
                    System.out.println("정답입니다!!");
                } else {
                    System.out.println("틀렸습니다. 정답은 " + answer + "입니다.");
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        System.out.println("-----------------------------------------------------");
        System.out.println("모든 퀴즈가 완료되었습니다.");
        System.out.println("수고하셨습니다.");

    }
}

퀴즈 13 질문입니다.

해당 문제 풀어본 결과입니다. 강의에서 알려주신 부분이랑 다른 부분이 있는데

혹시 제가 만든 코드가 올바른 코드인지 알려 주실 수 있을까요?

그리고 알려주신 정답이랑 비교했을 때 어떤 코드가 보다 차후 실제 업무에서 적합한 코드인지도 알려주셨으면 좋겠습니다.

감사합니다 !


추가적으로 강의 내에서는 try-catch 구문 안에 모든 문장 ( 속담 퀴즈입니다 ~ 수고하셨습니다) 을 넣어주셨는데 혹시 안에 있는 거랑 밖에 있는 게 어떤 차이가 있나요?

 

답변 2

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

새로운 질문을 작성하시기 전에 작성된 질문이 올바로 삭제되지 않은 문제가 있었던 것 같습니다 😅
아래 링크에 답변을 작성하고 새로운 질문을 확인 중인데 제가 말씀드린 소스코드가 이번 질문에서는 순서가 올바로 작성되었네요!

👉 https://www.inflearn.com/questions/1223648

결과적으로 코드를 잘 작성해주셨습니다. 파일의 내용을 읽어와서 어떤 작업을 할 때 일반적으로는

while (true) { ... }

와 같은 무한 반복문 보다는 작성해주신 것처럼

while ((line = br.readLine()) != null) { ... }

와 같은 코드를 많이 사용합니다. 혹시 어떤 문제로 반복문을 올바로 탈출하지 못하고 계속 반복하는 경우를 방지하기 위해서 그렇습니다.

그리고 (속담 퀴즈입니다 ~ 수고하셨습니다) 부분을 try catch 문 외부에 넣거나 내부에 넣거나 큰 차이는 없습니다. 다만 (수고하셨습니다) 부분이 try catch 외부에 있게 되면 try 문 내에서 어떤 문제가 발생하여 퀴즈가 올바로 진행되지 않았을 경우에도 (수고하셨습니다) 라는 문장이 출력되는 경우가 발생할 수 있겠네요. 사용자는 퀴즈를 하나도 풀지 못했는데 수고했다는 메시지를 출력하면 프로그램의 동작이 다소 매끄럽지 않을 수 있습니다. 이런 경우에는 try catch 내에서 (수고하셨습니다) 라는 메시지를 출력하되, 예상치 못한 오류에 대비하여 catch 문 내에서 (문제가 발생하여 퀴즈가 올바로 진행되지 않았습니다) 정도의 메시지를 출력하면 더 좋을 것 같습니다 😊

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. Van prime님, 질문하신 내용과 관련해 도움될 만한 기존 답변을 찾았습니다.

퀴즈 13에 대해 질문하신 내용은 주로 파일 입출력과 사용자 입력 처리에 대한 정확한 구현 방법과, try-catch 구문의 활용에 관한 것으로 보입니다. 이와 관련하여 “퀴즈 13 질문” 내용이 유사한 질문에 대한 답변을 제공합니다.

퀴즈를 해결하면서 나오셨던 주요 포인트는 BufferedReader를 이용하여 파일에서 라인을 읽고, Scanner를 통해 사용자의 입력을 받는 과정입니다. 강의 내용과 다르게 구현하신 부분에 대한 올바름, 그리고 실제 업무 적합성 여부를 비교한다면, 제공된 답변에서는 BufferedReaderBufferedWriter 사용 시 마지막에 .close() 를 호출하는 것의 중요성에 초점을 맞추고 있습니다. 이는 파일 리소스를 정상적으로 해제하기 위함이며, 실제 업무에서도 이러한 리소스 관리는 매우 중요합니다.

더불어, try-catch 구문 안에 문장을 넣는 것과 밖에 넣는 것의 차이점에 대해서는, 주로 예외 처리의 범위와 관련이 있습니다. try-catch 안에 코드를 넣는 것은 해당 범위 내에서 발생할 수 있는 예외를 처리하고자 할 때 사용합니다. 강의에서 모든 문장을 try-catch 구문 안에 넣으셨다면, 그 부분 전체에서 발생할 수 있는 예외를 한 곳에서 처리하고자 하는 의도일 수 있습니다.

각각의 경우별로 무엇이 더 적합한가는 실제 상황, 요구사항, 개발 컨벤션 등에 따라 달라질 수 있으나, 기본적으로는 자원을 사용하는 코드는 가능한 한 try 블록 내에 두고, 이를 통해 자원 해제를 보장해야 한다는 원칙에 맞춰 개발하는 것이 좋습니다.

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

Van prime님의 프로필 이미지
Van prime

작성한 질문수

질문하기