loading

프로그래밍/JAVA

[JAVA] 표준입출력 System.in 클래스

침착곰 2021. 5. 15. 17:17
반응형

안녕하세요

자바 프로그래밍을 하다보면 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과 다양한 사용법에 대해서 알아봤습니다!

반응형
그리드형