Notice
Recent Posts
Recent Comments
05-18 00:26
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Computer Language - I/O System 본문

Programming Language/Java

Computer Language - I/O System

알 수 없는 사용자 2023. 3. 22. 01:48

 키보드와 같은 데이터를 입력 받으려고 할 때, Stream형태로 입력을 받을 수 있도록 하는 것이 System.in이다. System.in은 사용자의 입력을 byte 형태(byte stream)로 받고, 사용자 편의에 초점이 맞춰져 있지 않아서 이를 위해 java.util에서는 Scanner 객체를 지원하고,  Scanner는 이런 System.in의 byte Stream을 꺼내서 사용하게 된다. Scanner은 사용자에게 편리한 입력들을 제공하게 된다.

 우리는 입력을 할 때 Enter 단위로 데이터를 끊어서 입력하지만, Scanner는 Whitespace에 대하여 데이터들을 나누게 된다. Whitespace는 다음과 같이 back slash(\)를 통해서 주로 선언이 되는 문자이다.

Whitespaces
공백(Space) ' '
탭(Tab) '\t'
개행(Newline) '\n'
복귀(Carriage return) '\r'
폼 피드(Form feed) '\f'
수직 탭(Vertical tab) '\u000B'

 이런 문자들을 통해 데이터들을 Token 단위로 나누게 되고, 해당 토큰 하나하나가 Scanner를 통해 데이터를 불러올 수 있다.

Method Description
next() whitespace 이전까지의 데이터들을 토큰으로 봄.
따라서, 다음의 코드는 공백문자, 개행문자에 대한 앞까지의 데이터들을 토큰으로 보므로 "ab"를 출력하게 된다.

Scanner scanner = new Scanner();

String s1 = scanner.next();
String s2 = scanner.next();

>> a b
>> "ab"
nextBoolean()  whitespace 이전까지의 데이터들을 토큰으로 보며, 해당 토큰이 문자열로 true, false를 받아 각각에 맞는 true, false의 Literal 형태로 반환해준다.
nextByte()  whitespace 이전까지의 데이터들을 토큰으로 보고, 해당 토큰을 byte 단위의 숫자로 된 문자열로 입력받는데, 해당 문자열은 반드시 -128~127 이어야만 한다.
nextDouble()  whitespace 이전까지의 데이터들을 토큰으로 보고, 해당 토큰을 Double Literal 형태의 문자열들을 입력받아 Double 형으로 리턴해주게 된다. 이때 문자열은 Exponential notation이나 Float-point Literal 로 사용하면 된다.
nextInt() 동일하다.
nextLine() '\n'을 기준으로 Token을 나누어 입력받게 된다.
nextLong() 동일하다.
nextShort() 동일하다.
close() close a scanner. == 해당 Scanner의 인스턴스가 사용하고 있던 자원들을 전부 해제하고, 객체를 지워버리는 역할을 한다.
hasNext()  만약 토큰이 남아 있다면, true를 return하고, 아니면 새로운 입력(next())을 기다리게 된다. (기다릴 때는 Ctrl+z를 통해 나올 수 있다.)

 close를 하는 것은 중요하다. 이는 자원 누수(memory leak)과 관련되어 있다. 안쓰는 프로그램이 있다면 삭제하듯이 불필요한 자원이 생긴다면 삭제해버리는 것이 낫다. 따라서 Scanner로 생성한 인스턴스를 삭제하고 싶다면 close를 꼭 써주자. 입력을 받았다면 출력 또한 있어야 한다. 기본적으로 콘솔창에 출력을 하는 함수들은 System.out에 들어가 있다.

Method Description
println argument로 들어가 있는 문자열을 출력한다.
print argument로 들어가 있는 문자열을 출력한다.
printf C언어의 printf와 동일하며, 문자열 포맷을 통해 변수들을 출력한다.

 printf("formatting string", var1, var2, ...)에서 쓰이는 formatting string은 다음의 형식을 가진다.

%[argument_index$][flags][width][.precision]conversion

ex.
%1$-7s : 첫번째 인자를 7개 너비의 좌측정렬에 string형으로 들어감
%10d : 10개의 너비의 정수형 변수가 들어감
%.2f : 소수점 둘째 자리까지 표현하고 셋째자리에서 반올림함

 

Formatting String

argument_index$ Only %conversion is mandatory
flags controls the modification of output
width the minimum number of characters to be written
.precision the digits after the radix point
conversion determines how the argument should be formatted
ex. 'f', 'g', 'd', 's'

여기서 주의할 점은 argument index number에 맞는 변수가 conversion에 들어가는 데이터 타입과 동일해야한다.

Comments