System.in
System 클래스는 자바 버추얼 머신을 구성하고 있는 표준 장치를 뜻하는 클래스이다. 자바 버추얼 머신은 그 자체가 완벽한 하나의 컴퓨터 플랫폼을 가정하고 있기 때문에 독립적으로 동작할 수 있는 구조를 표현하기 위하여 표준 입력과 표준 출력을 스스로의 System 클래스에 등록하여 사용한다.
여기에서 주목해야 할 부분은 System.in 변수의 타입이 InputStream 이라는 점이다.
InputStream 클래스는 최상위 클래스이면서 추상 클래스이다. 따라서 InputStream은 객체를 생성할 수 없는 클래스이다.
그런데도 System.in은 실제로 객체가 존재하고 있으며 이를 통하여 키보드 입력을 받을 수 있다. 이것은 변수의 타입은 선조 클래스이지만 실제 객체는 후손 객체이다. 자연스러운 형 변환이 지원되기 때문에 가능하다.
System.in을 통하여 접근되는 객체는 자바 버추얼 머신이 메모리로 올라오면서 미리 객체를 생성해 놓는, 대표적인 객체이다. 자료형이 InputStream이기 때문에 바이트 단위로만 입출력이 허용된다.
키보드에서 입력하는 자료는 때에 따라서 두 바이트가 합쳐져야 의미를 가지는 경우가 있다. 그래서 System.in을 통하여 읽을 경우에는 영문과 한글의 처리를 분리해서 구성해야 제대로 인식할 수 있다.
System.out
System.out 변수는 표준 출력 장치 객체를 가리키는 대표적인 출력 변수이다. 자바 언어를 처음 배우자마자 사용하는 문장 중 하나가 System.out.println() 메소드다.
System.out은 PrintStream 타입으로 선언되어 있는데 PrintStream은 OutputStream 클래스의 후손 클래스로 Exception을 안전하게 처리한 메소드로만 구성되어 있다. 이런 이유로 System.out 을 이용하여 출력할 때는 try, catch 구문을 작성할 필요가 없다.
Scanner
The Scanner class is used to get user input, and it is found in the java.util package.
To use the Scanner class, create an object of the class and use any of the available methods found in the Scanner class documentation. In our example, I use the nexInt() method, which is used to read Integer
Scanner 클래스는 유저의 입력을 받기 위해 사용이 되고 java.util 패키지에 속해있다
Scanner 클래스를 사용하기 위해선 객체를 생성해야하는데 스캐너 클래스에 속해 있는 method들을 사용해야한다
위 예시에선 정수를 읽기 위해 nextInt()를 사용했다