[java] br, sanner 객체

CHOI HONGSEO·2026년 3월 20일

BufferedReader와 Scanner 모두 클래스를 기반으로 만든 '객체(인스턴스)'

자바에서는 어떤 기능을 사용하기 위해 new 키워드를 사용하여 메모리에 그 기능을 할당하는데, 이를 객체 생성이라고 한다.

[BufferedReader 방식]

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

  1. System.in: 바이트 단위로 입력을 받는 기본 객체
  2. new InputStreamReader(...): 바이트를 문자(char)로 바꿔주는 다리 역할 객체
  3. new BufferedReader(...): 문자를 버퍼에 담아 한 번에 읽게 해주는 최종 객체 (br)

[Scanner 방식]

Scanner sc = new Scanner(System.in);

  1. System.in: 입력을 받는 기본 객체를 통째로 넘겨받습니다.
  2. new Scanner(...): 이 입력값을 분석(Parsing)해서 숫자나 문자열로 요리해주는 객체 (sc)를 생성합니다.

br이나 sc 모두 System.in을 사용할 경우 프로그램 종료 시 GC가 정리해주긴 하지만, 자바의 정석은 close()를 명시해줘야 한다!

Scanner의 주요 메서드

next() : 공백(Space)이나 줄바꿈 전까지의 문자열을 읽음.

nextLine() : 한 줄 전체를 읽음 (엔터 키를 칠 때까지).

nextInt() : 정수를 읽음.

nextDouble() : 실수를 읽음.

예외 처리

  • BufferedReader: readLine()을 쓸 때 반드시 throws IOException을 선언하거나 try-catch로 감싸야 합니다. (컴파일러가 강제함)
  • Scanner: 예외 처리를 강제하지 않아 코드가 짧아 보이지만, 잘못된 타입 입력 시 InputMismatchException이 발생할 수 있습니다.

동기화 (Thread-safe)

  • BufferedReader: 여러 스레드가 동시에 접근해도 안전합니다.
  • Scanner: 멀티스레드 환경에서 안전하지 않습니다.
profile
곧 성공할 개발자입니다.

0개의 댓글