내부 동작 방식과 설계 목적이 다르기 때문에 성능 차이 발생
Scanner
입력을 파싱(parsing)하기 위한 클래스
**파싱(parsing) : 입력된 데이터를 원하는 형식이나 구조로 변환하는 과정
공백을 기준으로 데이터를 파싱
내부적으로 공백을 기준으로 데이터를 분리하고 문자열을 정수로 변환하는 작업을 자동으로 수행
이 작업 때문에 메모리를 더 많이 사용하고 느림
동기화 O
멀티스레드 환경에서 안전하지만 이로 인해 오버헤드 발생 가능성 있음
멀티스레드 환경이 아닌 경우에도 동기화 강제 적용
**오버헤드(overhead) : 추가적인 시간, 메모리, 자원의 소비
BufferedReader
문자열 데이터를 효율적으로 읽기 위한 클래스
버퍼(buffer)를 사용하여 입력처리 속도 향상과 i/o 작업 최소화
**버퍼(buffer) : 임시로 저장하는 메모리 공간
입력스트림에서 한 번에 여러 데이터를 버퍼에 읽어온 뒤 요청할 때마다 데이터를 가져옴
한 줄씩 또는 버퍼 단위로 데이터를 읽음
단순히 문자열로 입력을 받아오기 때문에 메모리 사용량이 적고 빠름
별도로 파싱 처리를 해줘야 함
동기화 X
단일스레드 환경에서 더 효율적
+ 동기화란?
여러 스레드가 동시에 접근할 때 발생할 수 있는 문제를 방지하기 위해 특정 코드 블록이나 메서드의 실행을 하나의 스레드만 접근 가능하도록 lock하는 기법
멀티스레드 환경에서 데이터의 일관성과 안전성을 보장
IOException은 checked Exception이지만
InputMismatchException은 unchecked Exception
Scanner
발생 가능한 예외
사용자 입력을 받는 데 주로 사용되는데, 형식에 맞지 않는 입력에서 발생하는 예외는 필수X
BufferedReader
발생 가능한 예외
입출력 작업(파일, 네트워크, 콘솔 입력 등)에서 발생할 수 있는 예외에 대해 IOException을 던지므로 예외가 필수O