๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ ์–ธ์–ด/Java

์ฝ˜์†” ์ž…์ถœ๋ ฅ

<Java์˜ ์ •์„ ๊ฐœ์ •3ํŒ>์„ ๊ธฐ๋ณธ์œผ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • <์ฝ˜์†” ์ž…๋ ฅ>
  • 1. InputStream ํด๋ž˜์Šค ์ด์šฉ - ๊ธฐ๋ณธ์ ์ธ ์ž…๋ ฅ๋ฐฉ๋ฒ•
  • 1-1) ์ŠคํŠธ๋ฆผ(Stream)์ด๋ž€?
  • 2. InputStreamReaderํด๋ž˜์Šค ์ด์šฉ
  • 2-1) BufferedReader
  • 3. Scannerํด๋ž˜์Šค ์ด์šฉ
  • <์ฝ˜์†” ์ถœ๋ ฅ>

 

<์ฝ˜์†” ์ž…๋ ฅ>

์ฝ˜์†” ์ž…์ถœ๋ ฅ์€ ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๊ฐ๊ฐ ๋‹ฌ๋ผ์ง„๋‹ค. Java์˜ ๊ฒฝ์šฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ดํด๋ฆฝ์Šค๋‚˜ ๋„์Šค๋ฅผ ์ด์šฉํ•ด ๋งŽ์ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ฝ˜์†”์ฐฝ์„ ํ†ตํ•ด ์ž…๋ ฅ์„ ๋ฐ›๊ฑฐ๋‚˜ ์ถœ๋ ฅ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

  • InputStream - byte
  • InputStreamReader - character
  • BufferedReader - String

 

1. InputStream ํด๋ž˜์Šค ์ด์šฉ - ๊ธฐ๋ณธ์ ์ธ ์ž…๋ ฅ๋ฐฉ๋ฒ•

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);
    }
}
  • InputStream์˜ ๊ฐ์ฒด์ธ System.in ์„ ์ด์šฉํ•˜๋ฉด ์ฝ˜์†” ์ž…๋ ฅ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. 
  • read๋ฉ”์†Œ๋“œ๋กœ ์ฝ์€ 1 byte์˜ ๋ฐ์ดํ„ฐ๋Š” byte ์ž๋ฃŒํ˜•์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ int ์ž๋ฃŒํ˜•์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ์ €์žฅ๋˜๋Š” int ๊ฐ’์€ 0-255 ์‚ฌ์ด์˜ ์ •์ˆ˜๊ฐ’์œผ๋กœ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’์ด๋‹ค.
  • "abc" ๋ฅผ ์ž…๋ ฅํ•ด๋„ ์ถœ๋ ฅ์€ "a"์— ํ•ด๋‹น๋˜๋Š” ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’๋งŒ ์ถœ๋ ฅ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” InputStream์˜ read ๋ฉ”์†Œ๋“œ๋Š” 1 byte๋งŒ ์ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. read()๋ฉ”์†Œ๋“œ๋ฅผ 3๋ฒˆ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋งŒ๋“  ํ›„ read()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด "abc"์˜ 3byte๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • InputStream์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ ๋ชจ๋“  ์ž๋ฃŒํ˜•์„ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ์ธ์‹ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์„ ๋ชจ๋‘ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฃŒํ˜•์— ๊ด€๊ณ„์—†์ด ์ž…๋ ฅํ•  ์ˆ˜๋Š” ์žˆ์œผ๋‚˜ ์ด๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๊ธฐ ๋งค์šฐ ํž˜๋“ค๊ฒŒ ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ๋ฐœ์ƒ๋œ๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•œ ํด๋ž˜์Šค๊ฐ€ ๋ฐ”๋กœ InputStreamReader์ด๋‹ค. 

 

1-1) ์ŠคํŠธ๋ฆผ(Stream)์ด๋ž€?

์ŠคํŠธ๋ฆผ์„ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋ ค๋ฉด ์ˆ˜๋„๊ผญ์ง€๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์ˆ˜๋„๊ผญ์ง€๋ฅผ ํ‹€๋ฉด ๋ฌผ์ด ๋‚˜์˜ค๊ณ  ์ˆ˜๋„๊ผญ์ง€๋ฅผ ์ž ๊ทธ๋ฉด ๋ฌผ์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. A๋ผ๋Š” ๊ณณ์—์„œ๋ถ€ํ„ฐ B๋ผ๋Š” ๊ณณ๊นŒ์ง€ ์ˆ˜๋„๊ด€์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  A์—์„œ ๊ณ„์† ๋ฌผ์„ ๋ณด๋‚ธ๋‹ค๋ฉด B์—์„œ ์ˆ˜๋„๊ผญ์ง€๋ฅผ ํ‹€๋•Œ๋งˆ๋‹ค ๋ฌผ์ด ๋‚˜์˜ค๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ŠคํŠธ๋ฆผ์€ A์ˆ˜๋„๊ด€์—์„œ B์ˆ˜๋„๊ด€์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฌผ์˜ ํ๋ฆ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์ŠคํŠธ๋ฆผ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํŒŒ์ผ ๋ฐ์ดํ„ฐ (ํŒŒ์ผ์€ ๊ทธ ์‹œ์ž‘๊ณผ ๋์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ŠคํŠธ๋ฆผ์ด๋‹ค.)
  • HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ (๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ๋„ ์ŠคํŠธ๋ฆผ์ด๋‹ค.)
  • ํ‚ค๋ณด๋“œ ์ž…๋ ฅ (์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅํ•˜๋Š” ๋ฌธ์ž์—ด์€ ์ŠคํŠธ๋ฆผ์ด๋‹ค.)

 

 

2. 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);  //InputStreamReader๊ฐ์ฒด ์ƒ์„ฑ
        char[] a = new char[3];
        reader.read(a);

        System.out.println(a);
    }
}
  • InputStreamReader ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ์ƒ์„ฑ์ž์˜ ์ž…๋ ฅ์œผ๋กœ InputStream์˜ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • InputStream์—์„œ๋Š” ์ฝ์–ด๋“ค์ผ ๊ฐ’์„ byte๋ฐฐ์—ด๋กœ ์„ ์–ธํ•ด์•ผ ํ•˜์ง€๋งŒ, InputStreamReader๋ฅผ ์ด์šฉํ•˜๋ฉด byte๋Œ€์‹  char๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2-1) BufferedReader

์œ„ ์˜ˆ์ œ์˜ ๋ถˆํŽธํ•œ ์ ์€ ๊ณ ์ •๋œ ๊ธธ์ด๋กœ๋งŒ ์ŠคํŠธ๋ฆผ์„ ์ฝ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. BufferedReader์˜ readLine๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์—”ํ„ฐํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๊นŒ์ง€ ์ž…๋ ฅํ–ˆ๋˜ ๋ฌธ์ž์—ด ์ „๋ถ€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

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);
    }
}

 

 

3. Scannerํด๋ž˜์Šค ์ด์šฉ - ์ฝ˜์†”์ž…๋ ฅ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  //์ƒ์„ฑ์ž์˜ ์ž…๋ ฅ์œผ๋กœ System.in์„ ํ•„์š”๋กœ ํ•œ๋‹ค.
        System.out.println(sc.next());   //next()๋ฉ”์†Œ๋“œ๋Š” ๋‹จ์–ด ํ•˜๋‚˜(Token)๋ฅผ ์ฝ๋Š”๋‹ค.
    }
}
  • Scannerํด๋ž˜์Šค์˜ ์žฅ์ ์€ ์ž…๋ ฅ๋ฐ›๋Š” ๊ฐ’์ด ์ž๋ฃŒํ˜•์˜ ๊ตฌ๋ถ„์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์ ์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๊ฐ’์„ ์ฝ๊ฒŒ ๋œ๋‹ค
  • Scanner ํด๋ž˜์Šค์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค๋กœ ์ž…๋ ฅ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” 3๊ฐ€์ง€ ํ•จ์ˆ˜๊ฐ€ ์œ„์— ์žˆ๋Š” nextLine(), next(), nextInt()์ด๋‹ค. ๋” ๋งŽ์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ์‚ฌ์ดํŠธ(ํด๋ฆญ)๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
next() ๋‹จ์–ด ๋‹จ์œ„๋กœ ์ฝ๋Š” ๋ฉ”์†Œ๋“œ
nextLine() ๋ผ์ธ ๋‹จ์œ„๋กœ ์ฝ๋Š” ๋ฉ”์†Œ๋“œ
nextInt() intํ˜• ๊ฐ’์„ ์ฝ๋Š” ๋ฉ”์†Œ๋“œ

 

<์ฝ˜์†” ์ถœ๋ ฅ>

  • ์ฝ˜์†” ์ž…๋ ฅ์—์„œ System.in ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ์„ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด ์ถœ๋ ฅ์˜ ๊ฒฝ์šฐ System.out ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ์•ž์„œ ๋งŽ์€ ์˜ˆ์‹œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ค€๋Œ€๋กœ System.out.println()์„ ์„ ์–ธํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. Java.lang์— ์†ํ•œ System๊ฐ์ฒด๋ฅผ ํ†ตํ•ด JVM์—์„œ ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ์ž…์ถœ๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • System.out์˜ ๊ฐ•์  ์ค‘ ํ•˜๋‚˜๋Š” ๋ณ„๋„์˜ try/catch๋ฌธ์„ ์ž‘์„ฑํ•  ํ•„์š”ํ•˜ ์—†๋‹ค๋Š” ์ ์ด๋‹ค. ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์™„๋ฃŒ๋œ ๊ฒฐ๊ณผ ๊ฐ’ ๋งŒ์„ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ ํ•œ์ค„์˜ ๋ฌธ์žฅ์œผ๋กœ๋„ ์‰ฝ๊ฒŒ ์ถœ๋ ฅ ๊ฐ’์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.