주니어 기초 코딩공부

Java 입출력 (In/Out), Scanner 클래스 설명

jju_developer 2022. 12. 6. 21:37
728x90

안녕하세요 jju_developer 입니다.

 

오늘은 Java 입출력에 대해 간단하게 소개하는 시간을 갖겠습니다.

 

✔Java 입출력이란 무엇일까요?

 

처음 자바를 접했을 때 출력을 하기 위해서 System.out.println을 자주 사용하곤 했었습니다.

이제 본격적으로 System이 어디서 왔는지 왜 out을 사용했는지에 대한 궁금증을 해결해 보도록 하겠습니다.

 

[Java]

우선, 컴퓨터에서는 입력을 Input, 출력을 Output이라고 하여 I/O라고 줄여서 말합니다.

이러한 입출력을 Stream을 통해서 이루어지게 되는데,

 

[Stream]

간단히 Stram이란, Byte의 형태로 데이터를 전달하는 데 사용되는 연결 통로라고 생각하시면 됩니다.

Data가 흐르는 방향은 물(바이트)의 흐름과도 같으며, 한쪽 방향으로만 흐르기 때문에 이름을 Stream으로 정했다고 합니다.

단방향 전달만 가능하며, FIFO (First In First Out)의 구조로 되어있습니다. 

 

[정리]

▪바이트 스트림
        ◽InputStream / OutputStream
               ◽byte 기반 input / output stream의 최고 조상
        ◽ByteArrayInputStream / ByteArrayOutputStream
               ◽byte array( byte[] )에 대한 데이터를 입출력 하는 클래스
        ◽FileInputStream / FileOutputStream
               ◽파일( File )에 대한 데이터를 입출력 하는 클래스

 

▪문자 스트림
        ◽Reader / Writer
               ◽Character 기반 input / output stream의 최고 조상
        ◽FileReader / FileWriter
               ◽문자 기반의 파일을 입출력 하는 클래스



그렇다면,

 

✔Stream은 어떻게 활용할까요?

 

Stream 구분을해보았습니다!!!

java는 처리 단위에 따라 위 표처럼 나누어서 통신을 합니다.

 

이때 입력 스트립은 한 줄씩 읽고,

출력 스트림으로 데이터를 보낸 후 해당 공간을 비우게 됩니다.

 

InputStream과 OutputSream을 사용하려면 해당되는 패키지를 Ctrl+Shift+O 를 눌러서 import를 해주시고 사용하시면 됩니다.

 

 

 바이트 기반인 InputStream은 .read();라는 메서드를 사용하게 되는데

많은 숫자를 입력하더라도, 맨 앞의 하나의 숫자만 읽어오게 됩니다.

 

따라서 Char의 타입 형태로 변환하여 사용하거나, 기본형인 int를 사용하게 됩니다.

 

입출력을 할 때에는 꼭 out.flush(); && out.close();를 사용하여 끝을 내주어야 합니다.

 

✔out.flush();란?

write에 저장된 값을 출력하는 것과 동시에 비워주는 역할을 합니다.

 

✔out.close();란?

output을 끝낸다는 뜻입니다.

 


 부가 설명:

public class I {
InputStream in = System.in;

try{
	int data = in.read();
    System.out.println(data);
} catch (Exception e){
	System.out.println("오류")
		}
	}
}

 여기서 int타입의 data를 출력할 때 A라는 영문자를 입력한다고 하면, 65인 숫자가 return 된다.

많은 ABCDE를 입력값으로 친다고 하더라도 65라는A의 아스키코드 하나만 int로 출력되게 됩니다!!!

 

 여기서 어? 나는 65가 아닌 A를 출력하고 싶어! 그러면,

 

public class I {
InputStream in = System.in;

try{
	int data = in.read();
    System.out.println((Char)data);
} catch (Exception e){
	System.out.println("오류")
		}
	}
}

System.out.println((Char) data);

 이렇게 char으로 형 변환을 하여 입력받은 값을 출력하시면 됩니다.

 


 여기서 잠깐!

 

나는 하나의 65가 아니라 여러 가지를 출력해보고 싶다 하시는 분들도 계실 겁니다!

 

이때에는 for문을 활용하여 바이트 타입으로 저장하고 출력하는 예제를 보여드리겠습니다.

 

import java.io.OutputStrea,;

public class SystemOutExample{
public static void main(Stringp[args) throws Exception{

	//출력을 자바 콘솔에 해보겠습니다.
    
    OutputStream os = System.out;
    
    //for문을 통해서 숫자를 return 해보겠습니다.
	for (byte b = 48; b<58; b++){
    	os.write(b);
    }
	//48~57 까지의 아스키코드의 값을 출력해라!!!
	
    os.write(10); // 한줄띄고 출력해줭~
       
       
       os.flush();
       os.close();
	}
}

 

 출력:0123456789

 

import java.io.OutputStrea,;

public class SystemOutExample{
public static void main(Stringp[args) throws Exception{
  
    OutputStream os = System.out;
    
    //for문을 통해서 알파벳을 return 해보겠습니다.
	for (byte b = 97; b<123; b++){
    	os.write(b);
    }
	//97~122 까지의 아스키코드의 값을 출력해라!!!
	
    os.write(10); // 한줄띄고 출력해줭~
       
       
       os.flush();
       os.close();
	}
}

 출력: abcdefg....z

 

import java.io.OutputStrea,;

public class SystemOutExample{
public static void main(Stringp[args) throws Exception{
  
    OutputStream os = System.out;
    
	String hangul = "가나다라마바사" ;
    
    byte[] hangulBytes = hangul.getBytes();
    os.write(hangulBytes);
       
       os.flush();
       os.close();
	}
}

출력: 가나다라마바사

 

 


✔[Java] Scanner 클래스란 무엇일까요?

 

 Console클래스는 콘솔에서 입력된 문자열을 쉽게 읽을 수 있도록 제공하고 있지만,

 콘솔 클래스의 단점은 문자열은 읽을 수 있지만, 기본 타입의 값을 바로 읽을 수 없다는 것 이 빈다.

(기본 타입: 정수, 실수)

 

java.util.Scanner

• 콘솔로부터 기본 타입의 값을 바로 읽을 수 있습니다.

 

스캐너 클래스를 통해서 다양하고 편리하게 입력을 받을 수 있게 됩니다.

 

import java.util.Scanner;
public class Example{
public static void main(Stringp[args){
  
	Scanner scanner = new Scanner(System.in);
	
    System.out.print("문자열 입력>>");
    
    String inputString = scanner.nextLine();
    System.out.print(inputString);
	}
}

 우선 Scanner 클래스의 변수 scanner를 생성한 뒤,

 

scanner.nextLine();이라는 메서드를 이용하여 스트링 inpitString이라는 변수에 저장하였습니다.

그 후 System.out.println(안에다가 넣었습니다.);

 

출력 결과는 입력한 문자열이나 숫자가 전부 저장되어 다시 콘솔 창에 출력되는 것을 알 수 있습니다!

 


 

 지금까지 Java에서 자주 사용되는 입출력 (In/Out) 사용 방법과, Scanner 클래스에 대한 간단한 설명을 

마치겠습니다!

 

틀린 내용이나 질문 있으시면 댓글 남겨주세요~!

 

 

감사합니다.

 

 

 

 

 

 

 

728x90