Jump2Java 05장. 객체지향 프로그래밍
- 콘솔 입력
- InputStream
- InputStreamReader
- BufferedReader
- Scanner
콘솔 입력
import java.io.InputStream;
public class StreamTest {
public static void main(String[] args) throws Exception {
InputStream in = System.in;
int a;
a = in.read();
System.out.println(a);
}
}
/*
(입력)
abc
(출력)
97
*/
- 자바 내장 클래스 중 java.lang 패키지에 속해있지 않은 클래스를 사용하기 위해서 import 해야한다.
- InputStream은 자바의 내장 클래스이므로 import 해준다.
- System.in은 InputStream의 객체이다.
- InputStream의 read 메소드는 1 byte의 사용자의 입력을 받아들인다.
- 그렇기 때문에 "a"를 입력해도 "abc"를 입력해도 결과는 동일하게 97(a의 아스키코드)이 출력된다.
- throws Exception: InputStream으로 부터 값을 읽어들일 때는 IOException이 발생할 수 있기 때문에 예외처리를 해야 하는데 throws로 그 예외처리를 뒤로 미루게 한 것이다.
import java.io.InputStream;
public class StreamTest {
public static void main(String[] args) throws Exception {
InputStream in = System.in;
byte[] a = new byte[3];
in.read(a);
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
}
}
/*
(입력)
abc
(출력)
97
98
99
*/
- 크기를 지정한 byte 배열을 만든 후 read 메소드를 호출하면 입력이 배열에 저장된다.
- 하지만 역시 아스키코드 값으로 해석되고 문자열 형식으로 출력하지 못한다.
- 바이트 대신 문자로 입력 스트림을 읽으려면 InputStreamReader를 사용하면 된다.
import java.io.InputStream;
import java.io.InputStreamReader;
public class StreamTest {
public static void main(String[] args) throws Exception {
InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in);
char[] a = new char[3];
reader.read(a);
System.out.println(a);
}
}
/*
(입력)
abc
(출력)
abc
*/
- import 문을 하나 더 추가하고 객체를 생성할 때 생성자의 입력 값으로 InputStream 객체(in)가 필요하다.
- char 배열에 입력한 문자가 들어간다. 하지만, 미리 크기를 결정해야 한다.
- 입력한대로 저장하기 위해서 BufferedReader을 사용하면 된다.
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StreamTest {
public static void main(String[] args) throws Exception {
InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in);
BufferedReader br = new BufferedReader(reader);
String a = br.readLine();
System.out.println(a);
}
}
/*
(입력)
Hello World!
(출력)
Hello World!
*/
- import 문을 하나 더 추가하고 객체를 생성할 때 생성자의 입력 값으로 InputStreamReader의 객체(reader)가 필요하다.
- BufferedReader의 readLine 메소드를 이용하면 사용자가 엔터키를 입력할 때까지 입력한 문자열 전부를 읽는다.
정리하면 다음과 같다.
- InputStream - byte
- InputStreamReader - character
- BufferedReader - String
Scanner
- Scanner를 사용하면 보다 편리하게 입력을 받을 수 있다.
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
String str2 = sc.nextLine();
System.out.println(str);
System.out.println(str2);
}
}
/*
(입력)
Hello World 12345 123
(출력)
Hello
World 12345 123
*/
- Scanner 클래스는 생성자의 입력으로 System.in, 즉 콘솔입력인 InputStream 을 필요로 한다.
- Scanner 객체의 next() 메소드는 단어 하나(Token)를 읽어들인다.
- nextLine() 메소드는 하나의 라인(줄바꿈, 즉, 엔터)을 읽어들인다.
- next() 를 저장한 str 은 Hello를 저장했고 그 이후부터 전부 str2에 저장된 것이다.
- nextInt() 메소드는 다음 입력되는 정수를 읽어들인다.
'Application > Java' 카테고리의 다른 글
[Jump2Java] 07장 정적 변수와 메소드 (static) (0) | 2021.09.16 |
---|---|
[Jump2Java] 07장 접근 제어자 (0) | 2021.09.16 |
[Jump2Java] 05장 객체지향 프로그래밍 06 (0) | 2021.09.14 |
[Jump2Java] 05장 객체지향 프로그래밍 05 (0) | 2021.09.14 |
[Jump2Java] 05장 객체지향 프로그래밍 04 (0) | 2021.09.14 |
댓글