Chapter 02-4 변수와 시스템 입출력
※이 글은 신용권님의 혼자 공부하는 자바를 공부하며 참고한 글 입니다.
우리는 지금까지 코드를 출력하기 위해 해당 코드를 사용해왔다.
System.out.println("출력 내용");
여기서 System.out 은 시스템의 표준 출력장치를 말한다.
out이 표준 출력장치, in이 표준 입력장치를 사용한다.
System.in.read();
변수값 출력하기
System.out.println(리터럴 또는 변수)
메소드 | 의미 |
println(내용); | 괄호 안의 내용을 출력하고 행을 바꿔라 |
print(내용); | 괄호 안의 내용을 출력만 해라 |
printf("형식문자열", 값1, 값2, ...) | 괄호 안의 첫 번째 문자열 형식대로 내용을 출력해라 |
이렇게 앞서 말했듯이 System.out은 표준 장치로 출력을 가지고 있고, 이후에 붙는 print, println, printf는 어떤 방식으로 출력할지를 말해준다.
여기서 형식문자열이란 전체 출력 자릿수나 소수 자릿수를 제한한다거나를 설정해줄 수 있다.
형식 문자열에서 %와 conversion(변환 문자)은 필수로 작성하고 그 외의 항목을은 모두 생략할 수 있다.
//example code
System.out.printf("이름: %s", 감자바);
System.out.printf("나이: %d", 19);
형식화된 문자열 | 설명 | 출력 형태 | |
정수 | %d %6d %-6d %06d |
정수 6자리 정수, 왼쪽 빈 자리 공백 6자리 정수, 오른쪽 빈 자리 공백 6자리 정수, 왼쪽 빈자리 0 채움 |
123 ___123 123___ 000123 |
실수 | %10.2f %-10.2f %010.2f |
소수점 이상 7자리, 소수점 이하 2자리. 왼쪽 빈 자리 공백 소수점 이상 7자리, 소수점 이하 2자리 오른쪽 빈 자리 공백 소수점 이상 7자리, 소수점 히라 2자리. 왼쪽 빈 자리 0 채움 |
____123.45 123.45____ 0000123.45 |
문자열 | %s %6s %-6s |
문자열 6자리 문자열, 왼쪽 빈 자리 공백 6자리 문자열, 오른쪽 빈 자리 공백 |
abc ___abc abc___ |
특수 문자 | \t \t %% |
탭(tab)만큼 들여쓰기 줄 바꿈 % 출력 |
% |
키보드에서 입력된 내용을 출력하기
앞서 말햇듯 System.in.read();로 키보드에서 입력된 값을 받아올 수 있다.
하지만 키보드에서 키 하나를 입력하면 프로그램에서는 숫자로 된 키코드를 읽는데 위 코드를 사용하여 변수에 저장 후 출력하면 해당 키코드가 출력된다.
//example code
int keyCode = System.in.read();
System.out.println("key code: " + keyCode);
예를 들어 위의 코드를 실행하고 a를 입력하면 실행결과는 아래와 같다.
key code: 97
key code: 13
key code: 10
a 하나만 입력했는데 왜 출력 결과는 3개가 나오나.
그것은 System.in.read()가 실행되면 Console view는 Enter키가 입력될 때 까지 대기상태가 된다.
따라서 Enter키를 입력하게 되면 해당 키의 키코드까지 읽는데
Enter키는 특수하게 다른키들과 달리 캐리티리턴(CR: 13)과 라인 피드(LF: 10)으로 구성된 2개의 키코드가 입력된다.
Scanner 클래스
System.in.read()의 단점은 앞서 말했듯 키코드를 하나씩 읽기 때문에 2개 이상의 키가 조합된 한글을 읽을 수 없다.
이러한 단점을 위해 자바는 Scanner 클래스를 제공하고 있다.
//example code
Scanner scanner = new Scanner(System.in);
String inputData = scanner.nextLine();
Scanner scanner: Scanner 타입의 변수 scanner를 선언한다.
new Scanner(System.in): 시스템의 입력 장치로부터 읽는 Scanner를 생성하는 코드
첫번째 코드로 인해 언제든지 키보드에서 읽고 싶을 때 sanner.nextLine() 메소드를 실핼할 수 있는 환경이 된다.
scanner.nextLine() 메소드는 Enter키가 입력되기 전까지 대기 상태가 되며, Enter키가 입력되면 입력된 모든 내용을 문자열로 읽어내는 메소드이다.
읽어주셔서 감사합니다.
