이는 read() 명령어가 입력값을 아스키(ASCII, American Standard Code for Information Interchange) 코드로 받아서 그렇습니다. 아스키 코드는 알파벳이나 숫자 등을 컴퓨터가 이해할 수 있게 변환(인코딩)할 때 사용합니다. 아스키 코드에서 숫자 1은 10진법으로 49입니다. 그래서 49가 출력됩니다. 코드를 다시 실행해 a를 입력해보면 97이 출력됩니다. a는 아스키 코드에서 10진법으로 97입니다.
TIP — 아스키 코드에 관한 자세한 내용은 https://ko.wikipedia.org/wiki/ASCII를 참고하세요.
이번에는 코드를 다시 실행해 123을 입력해 봅시다. 1을 입력했을 때처럼 49가 출력됩니다. read() 명령어가 1바이트(byte)만 읽어오기 때문입니다. 숫자나 알파벳은 1글자가 1바이트, 한글은 1글자가 2바이트입니다. 따라서 123을 입력해도 1만 인식해서 49가 출력됩니다.
입력한 그대로 1을 출력하려면 입력 명령어 System.in.read() 앞에 (char)를 추가하면 됩니다. 코드를 추가하고 실행해 봅시다.