System.in / out ํ ์คํธ
Java์ ํ์ค ์
์ถ๋ ฅ
System.in / out
System.err / setErr()
System.setIn() / Out()
System.In
์์
public String inputCarNames() {
String input = Console.readLine();
checkEmptyAndBlank(input);
return input;
}
private void checkEmptyAndBlank(String input) {
inputValidator.validateInputEmpty(input);
inputValidator.validateInputBlank(input);
}๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ํ ์คํธ ํ๋ ค๊ณ ํ๋ค. Console.readLine()์ Scanner์ readLine()๊ณผ ๋์ผํ๋ค.
โ ํ ์คํธ๋ input(๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ๋ ์ํฉ)์ ์ด๋ป๊ฒ ๊ตฌํํ ๊น?
ByteArrayInputStream๊ณผ ByteArrayOutputStream์ ๋ฉ๋ชจ๋ฆฌ, ์ฆ ๋ฐ์ดํธ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถ๋ ฅํ๋๋ฐ ์ฌ์ฉ๋๋ ์คํธ๋ฆผ์ด๋ค. ์ฃผ๋ก ๋ค๋ฅธ๊ณณ์ ์ ์ถ๋ ฅํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ๋ฐ์ดํธ ๋ฐฐ์ด์ ๋ด์์ ๋ณํ๋ฑ์ ์์ ์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ byte[] ๋ฐฐ์ด์ ์ธ์๋ก ๋๊ฒจ์ค์ผ ํ๋ค.
getBytes()๋ byte arrary๋ก ๋ณํํด์ ๋ฐํํด์ค๋ค.
ByteArrayInputStream์ InputStream์ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ํ์ ์ InputStream์ ์ฌ์ฉํด๋ ๋๋ค.
System.setIn(InputStream in) :
ํ์ค ์ ๋ ฅ์ ํค๋ณด๋, ํ์ผ, ๋ค๋ฅธ ์์ค์์ ์ ๋ ฅ ๋ฐ๊ณ ๋ก ์ค์ ํ๋ค.
ํ์ค ์ ๋ ฅ ์คํธ๋ฆผ(System.in)์ ์ฌ์ง์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค. ํ๋ก๊ทธ๋จ ์คํ ์ค ์ ๋ ฅ ์คํธ๋ฆผ์ ์ํ๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
System.setIn()์ ์ฌ์ฉํด์ System.in์ empty, blank์ byte arrary๋ก ์ค์ ํ๋ค. ์ด๊ฒ์
readLine()๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ํ๋ค.
ํ์ง๋ง ""๋ฅผ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๊ฒ ๋๋ฉด java.util.NoSuchElementException: No line found Exception์ ๋ฐ์ํ๊ฒ ๋๋ค. ์
๋ ฅ ๋ฐ์๊ฒ์ด ์๋ฌด๊ฒ๋ ์๋ค๊ณ ์ธ์ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋น ๋ฌธ์์ด์ ํ
์คํธ ํ๊ธฐ ์ํด์๋ empty = "\n"์ ์ค์ ํด์ค๋ค.
ํ๋ฆฌ์ฝ์ค์ Console.readLine()
์ฐํ ์ฝ ํ๋ฆฌ์ฝ์ค์์๋ Console์ด๋ผ๋ ๋ชจ๋์ ์ ๊ณตํด์ ์ด๊ฒ์ผ๋ก ์ ๋ ฅ์ ๋ฐ๋๋ค.
์ฝ์์ ๋ด๋ถ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ ๋ ฅ๋ฐ๋ ํ ์คํธ๋ฅผ ํ๋ฒ์ ์ฌ๋ฌ๊ฐ ์คํํ๋ฉด NoSuchElementException ์ ๋ฑ์ด๋ฒ๋ฆฌ๋๋ฐ, ๊ทธ ์ด์ ๋ getInstance().nextLine()์ ์๋ค.
์ฝ์์ Scanner๋ stacic์ผ๋ก ์ ์ธ๋์ด ์๊ณ , ์ฒซ ๋ฒ์งธ ํ ์คํธ์์ System.in์ "blank" ๊ฐ์ ๋ฃ๋๋ค.
ํ ์คํธ์์๋ Console.readLine()์ผ๋ก ์ ๋ ฅ์ ๋ฃ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋ค.
๊ทธ๋ฌ๋ฉด Scanner๊ฐ ์์ฑ๋๋ฉด์ "blank"๋ฅผ ์ค์บํ๋ค. ๊ทธ ๋ค์ ๋ ๋ฒ์จฐ ํ
์คํธ์์ ๋ Console.readLine()์ ํธ์ถํ๋ค. ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ฒ๋ฆฐ๋ค.
getInstance()๊ฐ ํธ์ถ๋ ๋ Scanner๋ ์ด๋ฏธ ๋ง๋ค์ด์ง ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋ฒ์งธ์์ Console.read()์ ํธ์ถํ๋ฉด ์ด๋ฏธ ์์ฑ๋ Scanner๋ฅผ ๋ฐํ ํด๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ตญ, ์ฒซ ๋ฒ์งธ ํ ์คํธ์์ Scanner๊ฐ ์์ฑ๋๊ณ ๊ฐ์ ํ ๋นํ๋ค. ๋ ๋ฒ์งธ ํ ์คํธ์์ Console.reaLine()์ ํ๊ฒ ๋๋ฉด ์ด๋ฏธ System.in์ ์ฒซ ๋ฒ์งธ input๊ฐ์ด ํ ๋น ๋์ด์๊ธฐ ๋๋ฌธ์, ๋ ๋ฒ์จฐ ํ ์คํธ์์๋ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
์ด๋ป๊ฒ ํด๊ฒฐํ๋?
@AfterEach ์ด๋ ธํ ์ด์ ์ ์ ์ฉ์์ผ์ ๋ฉ์๋๊ฐ ์คํ๋๊ณ ๋ ํ, static ์์ญ์ ์กด์ฌํ๋ Scanner๋ฅผ null๋ก ๋ฐ๊ฟ์ผํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์ ํ ์คํธ๋ ์ ์ํ๋๋ค.
System.out
System.in์ InputStream์ ์ฌ์ฉํด์ System.in์ ์ค์บํ๋ฉฐ ํ ์คํธ ํ๋ค.
System.out์ ์ถ๋ ฅ๋ ๋ฌธ๊ตฌ๋ฅผ PrintStream์ ๋ด๋๋ค.
outputView.method()์๋ System.out.print()๋ฉ์๋๊ฐ ๋ด๊ฒจ์๋ค.
๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด OutputStream output์ byte๋ก ์ ์ฅ๋๋ค.
์ํ๋ ์ถ๋ ฅ ๋ฌธ๊ตฌ์ output.toString()์ผ๋ก ์ถ๋ ฅ ๋ฌธ๊ตฌ๋ฅผ ๋น๊ตํ๋ค.
๋ ๊ฐ ์ด์์ ๋ฉ์๋๋ฅผ ์ฐ์์ผ๋ก ํ ์คํธ ํ๊ธฐ ์ํด์๋ @AfterEach๋ฅผ ์ค์ ํ์.
replaceAll("\n", "")์ ์์ฑํ๋ฉด output.toString() ๊ฒฐ๊ณผ์์ ๊ฐํ์ด ์ฌ๋ผ์ง๋ค.
strip()์ ๋ฌธ์์ด์ ์์๊ณผ ๋์์ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ ๋ฉ์๋์ด๋ค.
@CsvSourece์ ์ต์ ์ ์ถ๊ฐํ๋ฉด, ์ข์ฐ ๊ณต๋ฐฑ์ ์๋์ผ๋ก ์ญ์ ํ์ง ์๋๋ค.
ignoreLeadingAndTrailingWhitespace = false
output.toString()์ผ๋ก๋ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋น๊ต๋์ง ์์์ ๋ ๋ฉ์๋๋ฅผ ํ์ฉํด์ ๋น๊ตํ๋ค.
Last updated