안녕하세요
자바 프로그래밍을 하다보면 System.in이라는 용어를 많이 볼 수 있습니다
저도 많이 사용하지만 정확하게 어떤 클래스인지 정확하게 모른 채로 항상 사용했습니다
이번 포스팅에서는 System.in 클래스에 대해서 제 나름대로 정리한 내용에 대해서 설명해보겠습니다!
만약 틀린 부분이 있다면 댓글 부탁드립니다
목차
System.in이란?
System.in.read();
new Scanner(System.in);
new BufferedReader(new InputStreamReader(System.in));
System.in이란?
먼저 System.in은 java.io.*에서 Import하는 클래스입니다
System.in 값을 입력받는 클래스로 보시면 됩니다
값은 여러가지 방식으로 들어오기 때문에 만약 잘못된 값이 들어온 경우 에러가 나지 않도록 예외처리를 필수로 해줘야합니다
try-catch구문 혹은 IOException을 사용하여 예외처리를 하지 않으면 에러가 나타납니다
이제 예제를 통해서 System.in의 사용법에 대해서 알아보겠습니다
System.in.read()
System.in.read() 에 대해서 설명하겠습니다
read() 메서드는 한 바이트씩 입력된 값을 읽어드리는 메서드입니다
한 바이트씩 입력을 받기 때문에 한글은 입력받지 못 합니다
영어, 숫자, 특수문자 등을 입력받을 수 있습니다
아래 코드는 System.in.read()에 대한 예제입니다
1. System.in.read()에 48을 빼서 숫자를 출력합니다
System.in.read()는 아스키코드로 값을 받기때문에 48을 빼서 숫자정수로 받을 수 있습니다
// System.in.read()는 기본적으로 아스키코드로 값을 받습니다 -> Int형으로 받음
// 아스키코드에서 48을 빼면 숫자랑 같아져서 -48을 하여 숫자로 받을 수 있습니다
int Number = System.in.read() - 48;
2. System.in.read() -> char형으로 변환 문자열을 출력합니다
아스키코드는 char형으로 변환하면 문자열로 표시가 됩니다
그것을 응용하여 문자열이 출력되도록 합니다
// System.in.read()는 기본적으로 아스키코드로 값을 받습니다 -> Int형으로 받음
// 아스키코드에서 Char형으로 변경하면 문자열로 입력을 받을 수 있습니다
char Char = (char) System.in.read();
3. System.in.read(바이트, StartByte, EndByte)
System.in.read 다른 메서드입니다
바이트배열로 받는 방법입니다
바이트배열을 값을 받아서 String으로 변환합니다
String변환하면 나머지 배열의 값에서 공백부분이 쓰레기데이터가 남으므로 trim()을 사용하여 쓰레기데이터를 정리해줍니다
// System.in.read(바이트배열, StartByte, EndByte) -> 바이트배열로 입력받은 값을 집어넣습니다
// Byte배열 변수 선언
byte[] Byte = new byte[4096];
// Byte배열에 값을 입력
System.in.read(Byte, 0, 4096);
// Byte -> String전환
String StrByte = new String(Byte);
// 전환 시 Byte배열의 쓰레기데이터를 trim으로 정리
StrByte = StrByte.trim();
여기까지 System.in.read()의 세 가지 예제에 대해서 간단하게 알아봤습니다
아래에는 전체 코드와 결과 화면입니다
전체 코드
import java.io.IOException;
public class SystemIn {
public static void main(String[] args) throws IOException {
// System.in.read()는 기본적으로 아스키코드로 값을 받습니다 -> Int형으로 받음
// 아스키코드에서 48을 빼면 숫자랑 같아져서 -48을 하여 숫자로 받을 수 있습니다
int Number = System.in.read() - 48;
// 아스키코드에서 Char형으로 변경하면 문자열로 입력을 받을 수 있습니다
char Char = (char) System.in.read();
// Number 및 Char 결과 출력
System.out.println("Number : " + Number);
System.out.println("Char : " + Char);
// System.in.read(바이트배열, StartByte, EndByte) -> 바이트배열로 입력받은 값을 집어넣습니다
// Byte배열 변수 선언
byte[] Byte = new byte[4096];
// Byte배열에 값을 입력
System.in.read(Byte, 0, 4096);
// Byte -> String전환
String StrByte = new String(Byte);
// 전환 시 Byte배열의 쓰레기데이터를 trim으로 정리
StrByte = StrByte.trim();
// StrByte 결과 출력
System.out.print("StrByte : " + StrByte);
}
}
결과 화면
new Scanner(System.in);
자바를 시작한지 얼마 안되면 아무것도 모른채 외우는 구문입니다
Scanner 클래스를 사용하여 값을 입력받는 메서드입니다
System.in을 사용하여 Scanner의 다양한 메서드를 사용 다양한 값을 입력받습니다
예제를 통해서 알아보겠습니다
1. sc.next();
sc.next()는 공백을 입력하기 전까지의 값을 입력받는 Scanner의 메서드입니다
// next()를 사용하여 Space를 치기 전까지의 값을 입력합니다
String str1 = sc.next();
2. sc.nextLine();
sc.nextLine()은 Enter를 입력하기 전까지의 값을 입력받는 Scanner의 메서드입니다
// nextLine()을 사용하여 Enter를 치기 전까지의 값을 입력합니다
String str2 = sc.nextLine();
3. sc.nextInt();
sc.nextInt()는 Enter를 입력하기 전까지의 정수값을 입력받는 Scanner의 메서드입니다
정수값만 입력받으므로 문자열이 들어가는 경우 에러가 뜹니다
// nextInt()를 사용하면 Enter를 치기 전까지의 숫자값을 입력합니다
// nextInt()는 숫자만 입력받을 수 있으므로 문자열이 들어가면 에러가 뜹니다
int ScannInt = sc.nextInt();
Scanner의 사용방법은 더 있지만 제일 많이 사용하는 세 가지 방법에 대해서 알아봤습니다
아래는 전체코드와 결과 화면입니다
참고바랍니다!!
전체 코드
import java.io.IOException;
import java.util.Scanner;
public class SystemIn {
public static void main(String[] args) throws IOException {
// 자바를 시작하면 기본적으로 외우게되는 Scanner에서 사용하는 System.in입니다
// Scanner를 사용하여 값을 입력받습니다
Scanner sc = new Scanner(System.in);
// next()를 사용하여 Space를 치기 전까지의 값을 입력합니다
String str1 = sc.next();
// nextLine()을 사용하여 Enter를 치기 전까지의 값을 입력합니다
String str2 = sc.nextLine();
// nextInt()를 사용하면 Enter를 치기 전까지의 숫자값을 입력합니다
// nextInt()는 숫자만 입력받을 수 있으므로 문자열이 들어가면 에러가 뜹니다
int ScannInt = sc.nextInt();
// 결과출력
System.out.println("str1 : " + str1);
System.out.println("str2 : " + str2);
System.out.println("ScannInt : " + ScannInt);
}
}
결과 화면
결과화면을 보시면
첫 번째는 sc.next()를 썼기때문에 첫번째 str1은 "ABCDE"까지만 출력이 됩니다
두 번째는 sc.nextLine()을 써서 str2는 "FGHIJKLMNOPQRSTUVWXYZ"까지 출력이 됩니다
마지막으로 sc.nextInt()를 써서 "1234567890"이 출력이 됩니다
new BufferedReader(new InputStreamReader(System.in));
이것도 마찬가지로 자바를 하는 분들이라면 외우는 구문입니다
BufferedReader를 사용하여 바로바로 System.in으로 넣은 값을 읽어드리는 방법입니다
예제를 통해서 사용 방법에 대해서 알아보겠습니다!
1. br.readLine():
br.readLine()을 사용하여 Enter를 치기 전까지의 값을 읽어드립니다
// readLine()을 사용하여 Enter키를 입력하기 전까지의 값을 입력받는다
String brStr = br.readLine();
2. Integer.parseInt(br.readLine());
Integer.parseInt(br.readLine())을 사용하여 Enter를 치기 전까지의 값을 읽어드립니다
BufferedReader에서는 Int로 값을 읽는 방법이 없습니다
숫자를 입력받기 위해서는 Integer.parseInt를 사용하여 String을 Int로 변환해야합니다
// BufferedReader는 String변수만 받으므로 숫자로 변환하려면
// Integer.parseInt를 사용하여 String을 Int로 변환해야합니다
int brInt = Integer.parseInt(br.readLine());
전체 코드와 결과 화면을 알아보겠습니다
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemIn {
public static void main(String[] args) throws IOException {
// BufferedReader 변수 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// readLine()을 사용하여 Enter키를 입력하기 전까지의 값을 입력받는다
String brStr = br.readLine();
// BufferedReader는 String변수만 받으므로 숫자로 변환하려면
// Integer.parseInt를 사용하여 String을 Int로 변환해야합니다
int brInt = Integer.parseInt(br.readLine());
// 결과 출력
System.out.println("brStr : " + brStr);
System.out.println("brInt : " + brInt);
}
}
결과 화면
결과 화면을 보시면
A - Z까지 출력된 후
1- 0까지 출력이 됩니다
여기까지 System.in과 다양한 사용법에 대해서 알아봤습니다!
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점 (0) | 2021.05.16 |
---|---|
[JAVA/에러] No enclosing instance of type Overriding is accessible... 에러 해결 방법 (0) | 2021.05.16 |
[JAVA] 숫자/소수점 반올림/올림/내림 방법 (0) | 2021.05.13 |
[JAVA] java.lang.NumberFormatException 에러 해결 방법 (0) | 2021.05.13 |
[JAVA] 메서드(Method)란?? (0) | 2021.05.12 |