📖혼자공부하는자바

Chapter 02-4 변수와 시스템 입출력

개발자는신이야 2022. 11. 10. 17:59

※이 글은 신용권님의 혼자 공부하는 자바를 공부하며 참고한 글 입니다.

 

우리는 지금까지 코드를 출력하기 위해 해당 코드를 사용해왔다.

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개의 키코드가 입력된다.

 

JAVA keycode (영문은 대문자 기준입니다.)

 

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키가 입력되면 입력된 모든 내용을 문자열로 읽어내는 메소드이다.

 

읽어주셔서 감사합니다.