[JAVA] 표준 입출력

지누초이·2024년 3월 5일
0

JAVA

목록 보기
3/7
post-thumbnail

C/C++을 공부할 때는 printf(), scanf(), cout, cin을 같이 배웠다.
하지만 JAVA를 공부할 때는 System.out.println()과 같은 출력문은 먼저 사용해도, 표준입출력을 다루기 위한 스트림(Stream)은 거의 마지막에 배우게 되므로
우선 간단한 표준입출력 방법 몇 가지를 알아놓는 것이 좋을 것 같다.

표준입출력

  • 입출력을 위한 파일이나 주변 장치를 특별히 지정하지 않았을 경우에 사용되는 말그대로 표준적인 입출력 방식이다.
  • 보통 표준 입력은 키보드를 통해서, 표준 출력은 터미널의 화면을 통해서 이루어진다.

표준 출력

JAVA에서의 표준 출력은 많이 사용했다시피 다음과 같다.

  • System.out.println() : 개행을 포함한 출력
  • System.out.print() : 개행을 포함하지 않은 출력
  • System.out.printf() : 형식 지정자를 사용하고 개행이 포함되지 않은 출력

이 중 println()과 print()는 큰 어려움없이 사용할 수 있으나, printf()의 경우 형식 지정자에 대한 지식이 필요하다. C언어의 printf()와 비슷하다.

System.out.printf()

Format Specifier내용
%d10진수 정수
%o8진수 정수
%x16진수 정수
%c문자
%s문자열
%f실수

c언어와 다른 것은 long 형을 받기 위한 %ld나, double형을 받기 위한 %lf 가 없고 위에 명시대로 사용하면 된다.

정수 및 실수의 자리수를 채우는 것은 c언어와 같다.
예를 들어 5자리 정수를 채우기 위해선

System.out.printf("%5d", 123);   //   123
System.out.printf("%5d", 1234);  //  1234
System.out.printf("%5d", 12345); // 12345

빈 자리를 (0으로) 채우기 위해선

System.out.printf("%05d", 123);   // 00123
System.out.printf("%05d", 1234);  // 01234
System.out.printf("%05d", 12345); // 12345

소수점 밑 15자리를 채우기 위해선

System.out.printf("%.15f", 1.123);  // 1.123000000000000

위와 같이 사용이 가능하다.
또한 개행, 탭과 같은 것들도 c언어에서 사용하던 printf()처럼
이스케이프 문자(\) 를 사용하여 \n, \t 를 사용하면 된다.


표준 입력

표준 입력은 크게 다음 4가지 방법이 있으며, 이 중 Scanner가 가장 많이 쓰인다.

  • System.in
  • InputStreamReader
  • BufferReader
  • Scanner

System.in

int a = System.in.read() - '0';
System.out.println("a = " + a);
System.in.read(new byte[System.in.available()]);
  • System.in.read()를 통해 문자 하나를 읽어오고, 이 문자(아스키 코드값)를 대응되는 숫자값으로 변환하기 위해 '0'를 빼주었다.
  • System.in.read(new byte[System.in.available()]); 를 통해서, 입력 시 입력 스트림에 엔터까지 남아있게되는 부분을 제거해준다.

InputStreamReader

InputStreamReader reader = new InputStreamReader(System.in);
char[] c = new char[3];
reader.read(c);
  • 여러 개의 데이터를 받아오기 위한 배열이 필요하고 해당 배열의 크기만큼 저장이 된다.

BufferReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s1 = br.readLine();
  • 공백을 포함한 문자열을 읽어온다.

여기까지를 정리하면 다음과 같이 나타낼 수 있다.

클래스단위Syntax메서드
InputStreambyteInputStream in = System.inread()
InputStreamReadercharInputStreamReader reader = new InputStreamReader(in)read()
BufferedReaderStringBufferedReader br = new BufferedReader(reader)readLine()

Scanner

Scanner sc = new Scanner(System.in);
System.out.println(sc.next());		// 공백, 개행 전까지 데이터를 읽어옴
sc.nextLine();						// 개행 소진을 위함
System.out.println(sc.nextInt());	// 데이터를 하나 받아옴(Integer형만 가능)
sc.nextLine();						// 개행 소진을 위함

System.out.println(sc.nextLine());	// 공백을 포함하여 읽어오며, 일반적으로 많이 사용
  • Scanner는 버퍼 사이즈가 약 1kb로 매우 작아 입력과 동시에 전달된다.
  • BufferedReader의 버퍼 사이즈가 약 8kb로 비교적 큰 용량을 가져 입력 받은 값들을 저장해두었다가 한번에 전송할 수 있다.
  • 데이터가 많은 경우 속도면에서는 BufferedReader가 유리하다.

0개의 댓글