Categories: 미분류

Java Scanner 사용법과 닫는 방법

Java Scanner 사용법

Java에서 Scanner 클래스는 사용자로부터 입력을 받거나 파일을 읽을 때 유용한 도구이다. java.util.Scanner 패키지에 포함되어 있으며, 다양한 입력 소스를 처리할 수 있다. 가장 일반적인 용도는 콘솔 입력 처리이며, 파일 또는 문자열 입력에도 사용된다.

1. Scanner 클래스 기본 사용법

Scanner를 사용하려면 먼저 import java.util.Scanner;를 추가해야 한다. 그런 다음 System.in을 사용하여 입력을 받을 수 있다.

import java.util.Scanner;

public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("이름을 입력하세요: ");
        String name = scanner.nextLine();
        
        System.out.print("나이를 입력하세요: ");
        int age = scanner.nextInt();
        
        System.out.println("이름: " + name + ", 나이: " + age);
        
        scanner.close(); // 리소스 해제를 위해 닫기
    }
}

2. 다양한 입력 처리 방법

Scanner는 여러 가지 데이터 타입을 읽을 수 있다.

메서드설명
next()공백(스페이스, 개행 문자) 전까지 단어를 입력받음
nextLine()한 줄 전체를 입력받음
nextInt()정수를 입력받음
nextDouble()실수를 입력받음
nextBoolean()true 또는 false 값을 입력받음

3. Scanner로 파일 읽기

파일을 읽을 때도 Scanner를 사용할 수 있다.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class FileScannerExample {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            Scanner scanner = new Scanner(file);
            
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }
            
            scanner.close();
        } catch (FileNotFoundException e) {
            System.out.println("파일을 찾을 수 없습니다.");
        }
    }
}

Java Scanner 닫는 방법

Scanner는 스트림을 사용하므로 반드시 닫아야 한다. 닫지 않으면 리소스 누수가 발생할 수 있다.

1. scanner.close() 사용하기

Scanner는 내부적으로 입력 스트림을 사용하므로 close() 메서드를 호출하여 스트림을 닫아야 한다.

Scanner scanner = new Scanner(System.in);
// 입력 처리
scanner.close();

2. try-with-resources 사용하기

try-with-resources를 사용하면 자동으로 Scanner를 닫을 수 있다.

import java.util.Scanner;

public class TryWithResourcesExample {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.print("이름을 입력하세요: ");
            String name = scanner.nextLine();
            System.out.println("안녕하세요, " + name + "!");
        } // 자동으로 scanner.close() 호출됨
    }
}

Q&A

Q1. Scanner를 닫지 않으면 어떤 문제가 발생할까요?

Scanner는 내부적으로 입력 스트림(System.in, 파일 스트림 등)을 사용한다. 이를 닫지 않으면 메모리 누수 및 리소스 낭비가 발생할 수 있다. 특히 파일을 다룰 때는 리소스를 정리하지 않으면 다른 프로그램이 파일을 열 수 없는 문제가 발생할 수 있다.

Q2. Scanner를 여러 번 열고 닫아도 되나요?

네, 가능하지만 System.in을 사용한 Scanner를 여러 번 열고 닫으면 문제가 발생할 수 있다. System.in을 닫으면 이후에 다시 열 수 없으므로, 한 번만 생성하고 마지막에 닫는 것이 좋다.

Scanner scanner = new Scanner(System.in);
// 여러 입력 처리
scanner.close();

Q3. Scanner로 입력을 받을 때 nextLine()nextInt()를 함께 사용하면 문제가 발생하는 이유는?

nextInt()를 호출하면 숫자만 읽고 개행 문자(\n)를 남긴다. 이후 nextLine()이 실행될 때, 개행 문자를 읽어 빈 입력처럼 동작한다.

해결 방법: nextLine()을 추가해서 개행 문자를 처리한다.

Scanner scanner = new Scanner(System.in);
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();
scanner.nextLine(); // 개행 문자 제거
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
System.out.println("이름: " + name + ", 나이: " + age);
scanner.close();

Q4. Scanner를 파일 입력에 사용할 때 주의할 점은?

  • 파일이 존재하는지 먼저 확인해야 한다.
  • ScannerFileNotFoundException을 발생시킬 수 있으므로 예외 처리가 필요하다.
  • 읽기가 끝나면 반드시 close()를 호출해야 한다.

Q5. Scanner를 사용하지 않고 입력을 받는 다른 방법은?

  • BufferedReader: Scanner보다 속도가 빠르며 대량의 데이터 처리에 유리하다.
  • Console 클래스: 콘솔 입력만 가능하며, 보안이 필요한 비밀번호 입력에 유용하다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderExample {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("이름을 입력하세요: ");
        String name = reader.readLine();
        System.out.println("이름: " + name);
    }
}

결론

Java의 Scanner는 입력을 받을 때 매우 유용하지만, 사용 후 반드시 닫아야 하며 nextInt()nextLine()을 함께 사용할 때 주의해야 한다. try-with-resources를 활용하면 자동으로 리소스를 정리할 수 있으며, 파일 입력에도 효과적으로 사용할 수 있다. 필요에 따라 BufferedReader와 같은 대안을 고려할 수도 있다.

huniverse5

Recent Posts

엑셀365 ActiveX 컨트롤로 업무 효율 극대화하기

엑셀365에서 ActiveX 컨트롤은 사용자가 더욱 정교하고 인터랙티브한 사용자 인터페이스(UI)를 구성할 수 있도록 도와주는 고급 도구입니다.…

1개월 ago

엑셀365 폼 컨트롤로 양식 자동화하기 실무 가이드

엑셀365 폼 컨트롤로 양식 자동화하기 실무 가이드 엑셀365의 폼 컨트롤(Form Controls) 기능은 사용자가 데이터 입력을…

1개월 ago

엑셀365 사용자 정의 함수(UDF) 쉽게 만드는 방법

엑셀365에는 수백 개의 기본 내장 함수가 있지만, 실무에서는 내장 함수만으로 부족한 상황이 종종 발생합니다. 이럴…

1개월 ago

엑셀 매크로로 반복 업무 자동화하는 실전 예제

엑셀에서 자주 반복하는 작업, 예를 들어 보고서 포맷 정리, 데이터 복사 및 붙여넣기, 시트 생성,…

1개월 ago

엑셀365 VBA 매크로 시작부터 고급 활용까지 완벽 가이드

엑셀365에서 VBA(Visual Basic for Applications) 매크로는 반복되는 작업을 자동화하고, 사용자의 클릭이나 입력에 반응하여 맞춤형 엑셀…

1개월 ago

엑셀365 슬라이서 기능으로 피벗 테이블 분석 효율 높이기

엑셀365 슬라이서 기능으로 피벗 테이블 분석 효율 높이기 엑셀365의 슬라이서(Slicer) 기능은 피벗 테이블이나 표에서 필터링을…

1개월 ago