-
์ฝ๋ฉํ ์คํธ๋ฅผ java๋ก ์ค๋นํ๊ฒ ๋๋ฉด์, ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฐ์ ์ ์ถ๋ ฅ ๊ฐ๋ ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
์๋ฐ ์ ์ถ๋ ฅ(IO)์ ๊ธฐ๋ณธ ๊ฐ๋
์๋ฐ์ ์ ์ถ๋ ฅ์ ‘Stream’์ ํตํด ์ด๋ฃจ์ด์ง๋ค. (java8๋ถํฐ ๋์ ) stream์ ํ๋ฆ์ด๋ผ๋ ๋ป์ ๋ดํฌํ๊ณ ์๋ฏ์ด ์๋ฐ์์ stream์ ์ผ๋ จ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ๋ฆฌํจ๋ค.
์ด๊ฒ ๋์ฒด.. ๋ฌด์จ ๋ง์ด๋ํ๋ฉด ํธ์์ฒ๋ผ ๋ฌผ์ด ๊ณ ์ฌ์๋ ๊ฒ ์๋, ๋ฌผ์ด ํ๋ฅด๋ฏ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ ํ๋ฆ์ผ๋ก ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด collection๊ณผ stream์ ๋น๊ตํด๋ณด์.
โ ์ปฌ๋ ์ (Collection)
- List, Set, Map ๊ฐ์ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ(์ปจํ ์ด๋)์ด๋ค.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); for (String name : names) { System.out.println(name.toUpperCase()); // ๊ธฐ์กด ๋ฆฌ์คํธ๋ฅผ ์ง์ ์ํํ๋ฉฐ ์ถ๋ ฅ }
- ์๋ฅผ ๋ค์ด List๋ ์ฌ๋ฌ ๊ฐ์ string ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ง์ ํ๋์ฉ ๊ฐ์ ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ปฌ๋ ์ ์ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ๋ค. ์ญ์ ํ๊ธฐ ์ ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์๋ค.
โ ์คํธ๋ฆผ (Stream)
- Stream ์ ๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐ์ด ์๋๋ผ ๋ฐ์ดํฐ๊ฐ ์ง๋๊ฐ๋ "ํ์ดํ๋ผ์ธ" ๊ฐ์ ๊ฐ๋ ์ด๋ค.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .map(String::toUpperCase) // ๋ฐ์ดํฐ๋ฅผ ๋ณํ .forEach(System.out::println); // ์ต์ข ์ฐ์ฐ์ ํตํด ์ถ๋ ฅ
- ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ ํ์ง ์๊ณ ์ฐ์ฐ ์์ฒญ์ด ์์ ๋๋ง ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค.(์ผ์ข ์ Lazy Collection, ์ด๋ก ์ ์ผ๋ก๋..)
- → ์คํธ๋ฆผ์ ํ ๋ฒ ์ฌ์ฉํ๋ฉด ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก FIFO ๊ตฌ์กฐ์ด๋ฉฐ, ํ๋์ ์คํธ๋ฆผ์ผ๋ก ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค. ์ ์ถ๋ ฅ์ ๋์์ ์ํํ๋ ค๋ฉด ์ ๋ ฅ ์คํธ๋ฆผ๊ณผ ์ถ๋ ฅ ์คํธ๋ฆผ์ด ํ์ํ๋ค.
์๋ฐ ์ ์ถ๋ ฅ
์ข ๋ฅ IO ๋์ ๊ธฐ์ค ์๋ฃ์ ์ข ๋ฅ ๊ธฐ์ค ์คํธ๋ฆผ์ ๊ธฐ๋ฅ ๊ธฐ์ค FileInputStream ์ ๋ ฅ ์คํธ๋ฆผ ๋ฐ์ดํธ ๋จ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ FileReader ์ ๋ ฅ ์คํธ๋ฆผ ๋ฌธ์ ๋จ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ BufferedInputStream ์ ๋ ฅ ์คํธ๋ฆผ ๋ฐ์ดํธ ๋จ์ ๋ณด์กฐ ์คํธ๋ฆผ BufferedReader ์ ๋ ฅ ์คํธ๋ฆผ ๋ฌธ์ ๋จ์ ๋ณด์กฐ ์คํธ๋ฆผ FileOutputStream ์ถ๋ ฅ ์คํธ๋ฆผ ๋ฐ์ดํธ ๋จ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ FileWriter ์ถ๋ ฅ ์คํธ๋ฆผ ๋ฌธ์ ๋จ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ BufferedOutputStream ์ถ๋ ฅ ์คํธ๋ฆผ ๋ฐ์ดํธ ๋จ์ ๋ณด์กฐ ์คํธ๋ฆผ BufferedWriter ์ถ๋ ฅ ์คํธ๋ฆผ ๋ฌธ์ ๋จ์ ๋ณด์กฐ ์คํธ๋ฆผ ๋ฌธ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ด๋?
์๋ฐ์ Char ํ์ 2 byte๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ฐ์ดํธ ๋จ์๋ ์ ์ถ๋ ฅ ๋จ์๊ฐ 1 byte์ด๋ฏ๋ก ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฑ์ฅํ ์คํธ๋ฆผ๋ณด์กฐ ์คํธ๋ฆผ์ด๋?
๊ธฐ๋ฐ ์คํธ๋ฆผ์ ๋์์ ์ง์ ์๋ฃ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ธฐ๋ฅ์ ์คํธ๋ฆผ์ด๋ผ๋ฉด, ๋ณด์กฐ ์คํธ๋ฆผ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ง ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ ์๋ค.
InputStream / OutputStream
- ํ๋์ ๊ฐ์ ์ ๋ ฅ๋ฐ๊ณ , ํ๋์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
InputStreamReader / OutputStreamWriter
- 2๊ฐ ์ด์์ ๊ฐ์ ์ถ๋ ฅ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- System.in์ 1 ๋ฐ์ดํธ ๋จ์ → ์ด๊ฑธ stream์ผ๋ก ์ฝ์ด์ charter ๋จ์๋ก ์ฝ์ ์ ์๊ฒ ํด์ค
Scanner
Scanner sc = new Scanner(System.in); System.out.println(sc.next());
- ์ฝ์ ์ ๋ ฅ ํด๋์ค
- ํ ํฐ๋จ์(๊ณต๋ฐฑ/ ๊ฐํ ๋ฌธ์๋ก ๊ตฌ๋ถ)๋ก ์ ๋ ฅ๊ฐ์ ์ธ์ํด์ ๋์ํ๋ค.
๋ฉ์๋
- next(): String ์ฝ๊ธฐ
- nextInt(): int ์ฝ๊ธฐ
- next๋จธ์๊ธฐ(): ๋จธ์๊ธฐ ์ฝ๊ธฐ
- nextLine(): ๊ฐํ์ด ๋์ค๊ธฐ ์ ๊น์ง ๋ค ์ฝ๊ธฐ
BufferedReader / BufferedWriter
- ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์
์ถ๋ ฅ ํด๋์ค
- ํ๋ ํ๋ ์ฎ๊ธฐ๋ ๊ฒ์ด ์๋๋ผ, ์ฌ๋ฌ ๋ฌผ๊ฑด์ ํ ๋ฒ์ ๋ด์์ ์ฎ๊ธด๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก String์ผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์, int๋ก ๊ณ์ฐํด์ผ๋๋ ๊ฒฝ์ฐ ํ๋ณํ์ด ํ์ํ๋ค.
- Scanner์ ๋ค๋ฅด๊ฒ ๊ณต๋ฐฑ์ด ์๋ ์ํฐ๋ง ๊ฒฝ๊ณ๋ก ์ธ์ํ๋ค.
- ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ Scanner๋ณด๋ค ๋น ๋ฅผ ์ ์์
- ์ฌ์ฉ ์์๋ ๋ฉ์ธ ๋ฉ์๋์ IOException์ throwํ๊ฑฐ๋ try catch ๋ฌธ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
BufferedReader
BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String input=br.readLine(); String[] s = br.readLine().split(" "); // ๋ฌธ์์ด๋ก ๋ฐ๊ณ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ์๋ฆ
- ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์ ๋ ฅ ํด๋์ค
๋ฉ์๋
- close(): ์ ๋ ฅ ์ข ๋ฃ
- markSupported(): ์คํธ๋ฆผ์ด mark ๊ธฐ๋ฅ์ ์ง์ํ๋์ง t/f๋ก ์๋ ค์ค
- read(): ํ ๊ฐ์ ๊ธ์ ์ฝ๊ธฐ
- readLine(): String์ผ๋ก ํ ์ค ์ฝ๊ธฐ
- skip(long n): n๊ฐ์ ๋ฌธ์ ๊ฑด๋๋ฐ๊ธฐ
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // ์ ์ธ String str = "abcdef"; // ์ถ๋ ฅํ ๋ฌธ์์ด bw.write(s); // ์ถ๋ ฅ bw.newLine(); // ์ค๋ฐ๊ฟ bw.flush(); // ๋จ์์๋ ๋ฐ์ดํฐ ๋ชจ๋ ์ถ๋ ฅ bw.close();
- ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์ถ๋ ฅ ํด๋์ค
๋ฉ์๋
- write() : ๊ดํธ ์์ ๊ฐ์ ์ถ๋ ฅ. ํ๋ผ๋ฏธํฐ๋ char or string
- ์ซ์๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ผ๋ฉด String.valueOf() ๋ก ๊ฐ์ธ์ผ ํจ
- flush(): ๋ฒํผ์ ๋จ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋น์ด ํ, ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
- close(): ๋ฒํผ์ ๋จ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋น์ด ํ, ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ณ ์คํธ๋ฆผ์ด ๋ซํ
- ๋ ์ถ๋ ฅํ ์ผ์ด ์๋ค๋ฉด flush()๋ฅผ ์ฌ์ฉํ์.
- newLine(): ๊ฐํ ๋ฉ์๋
๋ฒํผ๋ฅผ ์ด๊ณ ๋์๋ ์ฌ์ฉ ํ ๋ฐ๋์ flush์ close๋ฅผ ํด์ค์ผ ํ๋ค.
ํ์ค ์ถ๋ ฅ ๋ฉ์๋
System.out.print()
๊ดํธ ์์ ๋ด์ฉ์ ๋จ์ ์ถ๋ ฅ, ๊ฐํ x
System.out.println()
๊ดํธ ์์ ๋ด์ฉ์ ์ถ๋ ฅ, ๊ฐํ o
System.out.printf()
์ง์์์ ํ๋๊ทธ๋ฅผ ํตํด ํ์์ ์ง์ ํด์ ์ถ๋ ฅ ๊ฐ๋ฅ
์ง์์ ์ข ๋ฅ
- %b : boolean
- %d : 10์ง์
- %o : 8์ง์
- %x, %X : 16์ง์
- %c : ๋ฌธ์
- %s : ๋ฌธ์์ด
- %n : ์ค ๋ฐ๊ฟ
ํ๋๊ทธ ์ข ๋ฅ
- : ์ผ์ชฝ ์ ๋ ฌ
- +: +, - ๋ถํธ ์ถ๋ ฅ
- ๊ณต๋ฐฑ(’ ‘) : ์์์ผ ๋๋ง ๋ถํธ ์ถ๋ ฅ
- 0 : ๋จ์ ์๋ฆฌ์ 0์ ์ฑ์
- , : ์ผ์ ์๋ฆฟ์๋ง๋ค ๊ตฌ๋ถ ๋ฌธ์ ํ์
- # : 8์ง์, 16์ง์์ ์ ๋์ฌ ํ์
๊ทธ์ธ.. ์ ์ฉํ ํด๋์ค๋ค
StringTokenizer
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine());
- ์ง์ ํ ๊ตฌ๋ถ์๋ก ๋ฌธ์์ด(String)์ ๋๋ ์ฃผ๋ ํด๋์ค
- ๊ตฌ๋ถ์๊ฐ ์์ผ๋ฉด ๊ณต๋ฐฑ๋จ์๋ก ๋ฌธ์์ด์ ๋๋ ์ฃผ์ด, ๊ณต๋ฐฑ์ผ๋ก ์ ๋ ฅ๊ฐ์ด ๊ตฌ๋ถ๋๋ ๊ฒฝ์ฐ ์ ์ฉ
- ์ ๊ท์์ด๋ ์ธ๋ฑ์ค ์ ๊ทผ๊ณผ ๊ฐ์ ์ฒ๋ฆฌ๊ฐ ํ์์๋ค๋ฉด StringTokenizer๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์
๋ฉ์๋
hasMoreTokens() ๋จ์ ํ ํฐ์ด ์๋์ง ํ์ธ (true or false) nextToken() ๋ค์ ํ ํฐ ๋ฐํ (์์ผ๋ฉด NoSuchElementException ๋ฐ์) countTokens() ๋จ์ ํ ํฐ ๊ฐ์ ๋ฐํ nextToken(String delim) ์๋ก์ด ๊ตฌ๋ถ์๋ก ๋ณ๊ฒฝ ํ ๋ค์ ํ ํฐ ๋ฐํ StringBuilder
StringBuilder sb = new StringBuilder(); sb.append("a"); sb.append("b").append(" "); sb.append("c").append("\\n"); System.out.println(sb);
- ๋ณ๊ฒฝ๊ฐ๋ฅํ (mutable) ๋ฌธ์์ด์ ์์ฑํ๋ค.
- ์๋ฐ์์ ๋ฌธ์์ด์ ์ฐ๊ฒฐํด์ผํ ๋, ๋ฌธ์์ด์ ๋ฐ๋ณต์ ์ผ๋ก ์์ ํด์ผํ ๋ ์ ์ฉํ๋ค.
๋ฉ์๋
append(String s) ๋ฌธ์์ด ์ถ๊ฐ insert(int index, String s) ํน์ ์์น์ ๋ฌธ์์ด ์ฝ์ replace(int start, int end, String s) ํน์ ๋ฒ์ ๋ฌธ์์ด ๋ณ๊ฒฝ delete(int start, int end) ํน์ ๋ฒ์ ๋ฌธ์์ด ์ญ์ reverse() ๋ฌธ์์ด์ ๋ค์ง์ length() ๋ฌธ์์ด ๊ธธ์ด ๋ฐํ capacity() ๋ด๋ถ ๋ฒํผ ํฌ๊ธฐ ๋ฐํ setLength(int newLength) ๋ฌธ์์ด ๊ธธ์ด ์กฐ์ charAt(int index) ํน์ ์์น ๋ฌธ์ ๋ฐํ ์ฐธ๊ณ ํ ๊ธ๋ค
'๐ญ Study > : Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ch5 ์๋ฐ OOP ๋คํ์ฑ / ์ถ์ ๋ฉ์๋์ ์ถ์ ํด๋์ค (0) 2023.09.08 [Java] ch5 ์๋ฐ ์ธํฐํ์ด์ค (0) 2023.09.08 [Java] ch5 ์๋ฐ ์์ (๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ vs ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ) / ์์ฑ์ (0) 2023.09.05 [Java] ch5 ์๋ฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ OOP (ํด๋์ค, ๋ฉ์๋, ์๋ฐ ๋ณ์) (0) 2023.09.05 [Java] ch4 ์ ์ด๋ฌธ (0) 2023.08.31 ๋๊ธ