Java 스캐너(Scanner) 객체 | 메서드 많음, System.in, nextLine(), File객체, String 데이터 읽기

습토리·2025년 2월 24일
0

Java

목록 보기
17/32

Java Scanner 객체 완벽 정리!

Java에서 사용자 입력을 받을 때 가장 많이 사용하는 클래스 중 하나가 바로 Scanner입니다.
Scanner는 단순한 키보드 입력뿐만 아니라, 파일, 문자열에서도 데이터를 읽어올 수 있는 강력한 도구입니다.

이번 글에서는 Scanner 객체의 기본적인 사용법부터 다양한 활용법까지 정리해 보겠습니다!


1. Scanner 객체란?

Scanner사용자로부터 입력을 받을 때 사용되는 클래스입니다.
기본적으로 키보드 입력을 받을 수 있지만, 파일이나 문자열에서도 데이터를 읽어올 수 있습니다.

사용하기 위해서는 java.util.Scanner 패키지를 import해야 합니다.

import java.util.Scanner;  // Scanner 클래스 가져오기

2. Scanner 객체 생성하기

Scanner 객체를 생성하는 기본 문법은 다음과 같습니다:

Scanner scanner = new Scanner(System.in);
  • new Scanner(System.in): 키보드 입력을 받을 수 있는 Scanner 객체 생성
  • scanner: Scanner 객체를 담아두는 변수

3. 기본적인 입력 방법

3.1 문자열 입력받기 (nextLine())

사용자로부터 문자열(한 줄) 을 입력받을 때는 nextLine()을 사용합니다.

import java.util.Scanner;

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

        System.out.print("좋아하는 문장을 입력하세요: ");
        String sentence = scanner.nextLine();  // 문자열 입력받기
        
        System.out.println("입력한 문장: " + sentence);
    }
}

📌 실행 예시

좋아하는 문장을 입력하세요: 자바 공부는 재미있다!
입력한 문장: 자바 공부는 재미있다!

3.2 정수 입력받기 (nextInt())

사용자로부터 정수(Integer) 를 입력받을 때는 nextInt()를 사용합니다.

import java.util.Scanner;

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

        System.out.print("나이를 입력하세요: ");
        int age = scanner.nextInt();  // 정수 입력받기
        
        System.out.println("당신의 나이는 " + age + "살입니다.");
    }
}

📌 실행 예시

나이를 입력하세요: 25
당신의 나이는 25살입니다.

주의할 점: nextInt()를 사용한 후 nextLine()을 연달아 사용할 경우, 입력 버퍼 문제로 인해 제대로 입력되지 않는 문제가 발생할 수 있습니다. 이때는 scanner.nextLine()을 추가로 한 번 호출하면 해결됩니다.


4. Scanner의 다양한 활용

4.1 파일에서 입력받기 (File 객체와 함께 사용)

파일에서 데이터를 읽어올 때도 Scanner를 사용할 수 있습니다.

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

public class FileReadExample {
    public static void main(String[] args) {
        try {
            File file = new File("data.txt");  // 읽을 파일 지정
            Scanner scanner = new Scanner(file);  // 파일을 읽기 위한 Scanner 객체 생성

            while (scanner.hasNextLine()) {  // 파일에서 한 줄씩 읽기
                String line = scanner.nextLine();
                System.out.println(line);
            }

            scanner.close();  // Scanner 닫기 (메모리 해제)
        } catch (FileNotFoundException e) {
            System.out.println("파일을 찾을 수 없습니다.");
        }
    }
}

📌 파일(data.txt) 예시

안녕하세요
이것은 파일에서 읽은 데이터입니다.

📌 실행 결과

안녕하세요
이것은 파일에서 읽은 데이터입니다.

4.2 문자열에서 데이터 읽기 (String 사용)

Scanner를 활용하면 문자열에서 특정 데이터를 쉽게 추출할 수도 있습니다.

import java.util.Scanner;

public class StringScannerExample {
    public static void main(String[] args) {
        String data = "홍길동 25 서울";  // 공백으로 구분된 데이터
        Scanner scanner = new Scanner(data);  // 문자열을 Scanner로 처리

        String name = scanner.next();  // 첫 번째 단어 읽기
        int age = scanner.nextInt();   // 두 번째 값(정수) 읽기
        String city = scanner.next();  // 세 번째 단어 읽기

        System.out.println("이름: " + name);
        System.out.println("나이: " + age);
        System.out.println("도시: " + city);

        scanner.close();  // Scanner 닫기
    }
}

📌 실행 결과

이름: 홍길동
나이: 25
도시: 서울

5. Scanner 메서드 정리

메서드설명예제
nextLine()한 줄 입력받음 (띄어쓰기 포함)Hello World
next()공백 전까지 한 단어 입력Hello (띄어쓰기 이후 단어는 무시)
nextInt()정수 입력받음25
nextDouble()실수 입력받음3.14
nextBoolean()불리언 입력받음true or false
hasNextLine()다음 줄이 있는지 확인true or false
hasNextInt()다음 입력이 정수인지 확인true or false

완전 이해돼요! System.out.println()은 따로 저장하지 않고 바로 쓰는데,
Scanner는 왜 반드시 new Scanner(System.in);로 변수를 저장해야 하는지 헷갈릴 수 있어요.

이 차이를 쉽게 정리해볼게요! 🚀


🔹 정리

  • Scanner사용자 입력(키보드), 파일, 문자열에서 데이터를 읽을 수 있는 도구
  • 키보드 입력(System.in) 뿐만 아니라, 파일(File)이나 문자열(String)에서도 데이터를 읽을 수 있음
  • 다양한 메서드 제공nextLine(), nextInt(), nextDouble()
  • 입력 버퍼 문제 주의 (nextInt()nextLine() 사용 시 문제 발생 가능)

Scanner를 잘 활용하면 사용자와 상호작용하는 프로그램을 쉽게 만들 수 있어요! 🚀


6. System.out.println()과 Scanner의 차이

1️⃣ System.out.println()은 왜 저장하지 않아도 될까?

System.out.println("Hello, World!");
  • System.out 자체가 이미 만들어진 객체(instance)

    • System.outPrintStream이라는 미리 생성된 객체예요.
    • 그래서 System.out.println()바로 호출할 수 있음.
  • 즉, System.out은 Java에서 기본적으로 제공하는 "이미 존재하는 객체"라 따로 만들 필요가 없음!
    → 그냥 System.out.println("출력"); 하면 됨.


2️⃣ Scanner는 왜 반드시 객체를 만들어야 할까?

Scanner scanner = new Scanner(System.in);
  • Scanner는 기본적으로 만들어져 있지 않음

    • Scanner는 사용자가 직접 new Scanner(System.in)을 통해 만들어야 하는 새로운 객체(instance).
    • Java에서 Scanner를 기본적으로 제공하지 않기 때문에, 우리가 직접 객체를 생성해서 변수에 저장해야 함.
  • 이해하기 쉽게 비교하자면:

    • System.out은 미리 만들어진 프린터기
    • Scanner는 새로 사서 연결해야 하는 마이크
      • 프린터(System.out)는 이미 있어서 바로 출력 가능
      • 마이크(Scanner)는 직접 사서 연결(new Scanner(System.in))해야 입력 받을 수 있음

📌 정리

System.out.println()Scanner
객체 생성 필요?❌ (기본 제공됨)✅ (new Scanner() 필요)
사용 방법System.out.println("출력");Scanner scanner = new Scanner(System.in);
이유System.out이미 존재하는 객체라 바로 사용 가능Scanner는 직접 생성해야만 사용할 수 있음

📌 💡 쉽게 이해하는 핵심 포인트

  • System.out.println()은 이미 만들어진 프린터기 → 바로 사용 가능
  • Scanner는 마이크 → 직접 사서(new Scanner(System.in)) 연결해야 사용 가능
  • 그래서 Scanner scanner = new Scanner(System.in);을 써야 하는 것!

profile
재미난 삶을 살다

0개의 댓글