์๋
! ์ค๋ ์ฐ๋ฆฌ๋ ์ค์ํ ์๋ก์ด ์ฃผ์ ์ธ ๋์์ธ ํจํด์ ๋ค๋ฃฐ ๊ฒ์
๋๋ค . ์ด ํจํด์ ๋ฌด์์
๋๊น? ๋๋ ๋น์ ์ด " ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช
ํ์ง ๋ง๋ผ " ๋ ํํ์ ์์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค . ํ๋ก๊ทธ๋๋ฐ์๋ ๋ค๋ฅธ ๋ง์ ์์ญ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ง์ ๊ณตํต ์ํฉ์ด ์์ต๋๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ ๊ฐ ์ํํธ์จ์ด์ ๋ํด ์๋ํ๋ ๊ธฐ์ฑ ์๋ฃจ์
์ด ๋ง๋ค์ด์ก์ต๋๋ค. ์ด๋ฌํ ์๋ฃจ์
์ ๋์์ธ ํจํด์ด๋ผ๊ณ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํจํด์ ๋ค์๊ณผ ๊ฐ์ด ๊ณต์ํ๋ ์๋ฃจ์
์
๋๋ค. "ํ๋ก๊ทธ๋จ์์ X๋ฅผ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค." ๋ง์ ํจํด์ด ์์ต๋๋ค. ๋ฐ๋์ ์์งํด์ผ ํ ํ๋ฅญํ ์ฑ
์ธ "Head First Design Patterns"๊ฐ ๊ทธ๋ค์๊ฒ ํ์ ๋์์ต๋๋ค. ์์ปจ๋ ํจํด์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ์ผ์ข
์ ํ์ค์ด๋ผ๊ณ ํ ์ ์๋ ํด๋น ์๋ฃจ์
์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ค๋ ์์
์์๋ ๋ค์ ํจํด ์ค ํ๋๋ฅผ ๋ง๋ฉ๋๋ค. ์ด๋ํฐ. ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ์ค์ํ์์ ์ด๋ํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ํ์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ด๋ํฐ ์ค ์ผ๋ถ๋ ๋ง์ ์ปดํจํฐ์ ๋ฉํฑ์ ์๋ ์นด๋ ํ๋
๊ธฐ์
๋๋ค. ์ผ์ข
์ ๋ฉ๋ชจ๋ฆฌ ์นด๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ทธ๋์ ๋ฌธ์ ๊ฐ ๋ฌด์์
๋๊น? ์ปดํจํฐ์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ
๋๋ค. ๊ณตํต ์ธํฐํ์ด์ค๋ฅผ ๊ณต์ ํ์ง ์์ต๋๋ค. ์ปดํจํฐ์ USB ํฌํธ๊ฐ ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์นด๋๋ฅผ ์ฝ์
ํ ์ ์์ต๋๋ค. ์นด๋๋ฅผ ์ปดํจํฐ์ ์ฐ๊ฒฐํ ์ ์์ผ๋ฏ๋ก ์ฌ์ง, ๋น๋์ค ๋ฐ ๊ธฐํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ์นด๋ ๋ฆฌ๋๊ธฐ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ด๋ํฐ์
๋๋ค. ๊ฒฐ๊ตญ, ๊ทธ๊ฒ์ USB ์ผ์ด๋ธ์ด ์์ต๋๋ค! ์นด๋ ์์ฒด์ ๋ฌ๋ฆฌ ์นด๋ ๋ฆฌ๋๊ธฐ๋ ์ปดํจํฐ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ปดํจํฐ์ ๊ณตํต ์ธํฐํ์ด์ค์ธ USB๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ด๊ฒ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๋ณด์ด๋์ง ๋ด
์๋ค:
public interface USB {
void connectWithUsbCable();
}
์ด๊ฒ์ USB๋ฅผ ํตํด ์ฐ๊ฒฐํ๋ ๋จ ํ๋์ ๋ฐฉ๋ฒ์ด ์๋ USB ์ธํฐํ์ด์ค์
๋๋ค.
public class MemoryCard {
public void insert() {
System.out.println("Memory card successfully inserted!");
}
public void copyData() {
System.out.println("The data has been copied to the computer!");
}
}
์ด๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ์นด๋๋ฅผ ๋ํ๋ด๋ ํด๋์ค์
๋๋ค. ์ด๋ฏธ ์ฐ๋ฆฌ์๊ฒ ํ์ํ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. USB ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ง ์์ต๋๋ค. ์นด๋๋ฅผ USB ํฌํธ์ ์ฝ์
ํ ์ ์์ต๋๋ค.
public class CardReader implements USB {
private MemoryCard memoryCard;
public CardReader(MemoryCard memoryCard) {
this.memoryCard = memoryCard;
}
@Override
public void connectWithUsbCable() {
this.memoryCard.insert();
this.memoryCard.copyData();
}
}
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ ์ด๋ํฐ๊ฐ ์์ต๋๋ค! ๋ฌด์์CardReader
ํด๋์ค๋ ๋ฌด์์ด๋ฉฐ ์ ํํ ์ด๋ํฐ๋ก ๋ง๋๋ ๊ฒ์ ๋ฌด์์
๋๊น? ๋ชจ๋ ๊ฐ๋จํฉ๋๋ค. ์ ์๋๋ ํด๋์ค(MemoryCard)๋ ์ด๋ํฐ์ ํ๋ ์ค ํ๋๊ฐ ๋ฉ๋๋ค. ์ด๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ค์ํ์์ ๋ฉ๋ชจ๋ฆฌ ์นด๋๋ฅผ ์นด๋ ๋ฆฌ๋๊ธฐ์ ๋ฃ์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์นด๋๋ ๊ทธ ์ผ๋ถ๊ฐ ๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์นด๋์ ๋ฌ๋ฆฌ ์ด๋ํฐ๋ ์ปดํจํฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ณต์ ํฉ๋๋ค. USB ์ผ์ด๋ธ์ด ์์ต๋๋ค. ์ฆ, USB๋ฅผ ํตํด ๋ค๋ฅธ ์ฅ์น์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ์ CardReader ํด๋์ค๊ฐ USB ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ด์ ์
๋๋ค. ํ์ง๋ง ์ด ๋ฉ์๋ ๋ด์์ ์ ํํ ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น์? ์ ํํ ์ฐ๋ฆฌ๊ฐ ์ผ์ด๋์ผ ํ ์ผ์
๋๋ค! ์ด๋ํฐ๋ ์์
์ ๋ฉ๋ชจ๋ฆฌ ์นด๋์ ์์ํฉ๋๋ค. ์ค์ ๋ก ์ด๋ํฐ ์์ฒด๋ ์๋ฌด ๊ฒ๋ ์ํํ์ง ์์ต๋๋ค. ์นด๋ ๋ฆฌ๋์๋ ๋
๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ทธ ์ญํ ์ ์นด๋๊ฐ ์์
์ ์ํํ ์ ์๋๋ก ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ ์นด๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค. ๋ฐ๋ก ํ์ผ ๋ณต์ฌ์
๋๋ค!connectWithUsbCable()
๋ฐฉ๋ฒ) ๋ฉ๋ชจ๋ฆฌ ์นด๋์ "์๊ตฌ ์ฌํญ"์ ์ถฉ์กฑํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์นด๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ค๋ ์ฌ๋์ ์๋ฎฌ๋ ์ดํธํ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ๋ด
์๋ค.
public class Main {
public static void main(String[] args) {
USB cardReader = new CardReader(new MemoryCard());
cardReader.connectWithUsbCable();
}
}
๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ฌด์์ ์ป์์ต๋๊น? ์ฝ์ ์ถ๋ ฅ:
Memory card successfully inserted!
The data has been copied to the computer!
ํ๋ฅญํ. ์ฐ๋ฆฌ๋ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค! ๋ค์์ ์ด๋ํฐ ํจํด์ ๋ํ ์ ๋ณด๊ฐ ์๋ ๋น๋์ค ๋งํฌ์
๋๋ค.
Reader ๋ฐ Writer ์ถ์ ํด๋์ค
์ด์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ํ๋์ผ๋ก ๋์๊ฐ๊ฒ ์ต๋๋ค: ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์์ ์ ์ํ ๋ช ๊ฐ์ง ์๋ก์ด ํด๋์ค์ ๋ํด ๋ฐฐ์ฐ๊ฒ ์ต๋๋ค :) ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ผ๋ง๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ ๋์ง ๊ถ๊ธํฉ๋๋ค.Reader
โฏ์ค๋์ ๋ฐ ํด๋์ค ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค Writer
. ์ ๊ตฌ์ฒด์ ์ผ๋ก ๊ทธ ์์
? ์ด๋ํฐ์ ๋ํ ์ด์ ์น์
๊ณผ ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ ์์ธํ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ๋ถํฐ ์์ํ๊ฒ ์ต๋๋คโฏ Reader
. Reader
์ถ์ ํด๋์ค์ด๋ฏ๋ก ๊ฐ์ฒด๋ฅผ ๋ช
์์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. โฏ ๊ทธ๋ฌ๋ ๋น์ ์ ์ค์ ๋ก ์ด๋ฏธ ๊ทธ๊ฒ์ ์ต์ํฉ๋๋ค! ๊ฒฐ๊ตญ, ๋น์ ์ ๊ทธ ์์์ธ BufferedReader
๋ฐ ํด๋์ค์ ๋ํด ์ ์๊ณ ์์ ๊ฒ์
๋๋ค :)InputStreamReader
public class BufferedReader extends Reader {
โฆ
}
public class InputStreamReader extends Reader {
โฆ
}
ํด๋์ค InputStreamReader
๋ ํด๋์ ์ด๋ํฐ์
๋๋ค. ๊ธฐ์ตํ์๊ฒ ์ง๋ง InputStream
๊ฐ์ฒด๋ฅผ ์์ฑ์์๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ผ๋ฐ์ ์ผ๋ก System.in
๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
public static void main(String[] args) {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
}
ํ์ง๋ง ๋ฌด์ InputStreamReader
์ํฉ๋๊น?โฏ๋ชจ๋ ์ด๋ํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋์ ์ธํฐํ์ด์ค๋ฅผ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ก ๋ณํํฉ๋๋ค. โฏ์ด ๊ฒฝ์ฐ InputStream
์ธํฐํ์ด์ค์ ๋ํ ์ธํฐํ์ด์ค์
๋๋ค Reader
. ์ฒ์์๋ ํด๋์ค๊ฐ ์์ต๋๋ค InputStream
. ์ ์๋ํ์ง๋ง ๊ฐ๋ณ ๋ฐ์ดํธ๋ฅผ ์ฝ๋ ๋ฐ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ Reader
์ถ์ ํด๋์ค๊ฐ ์์ต๋๋ค. ๋ช ๊ฐ์ง ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ฌธ์๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๋ค! ์ฐ๋ฆฌ๋ ํ์คํ ์ด ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ํฐ์ ์ํด ํด๊ฒฐ๋๋ ๊ณ ์ ์ ์ธ ๋ฌธ์ ์ธ ํธํ๋์ง ์๋ ์ธํฐํ์ด์ค์ ์ง๋ฉดํฉ๋๋ค. ๊ทธ๊ฒ ๋ฌด์จ ๋ป์ด์ผ? Oracle ์ค๋ช
์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์์ ํด๋์ค์ ๋ฉ์๋์
๋๋ค InputStream
. ์ผ๋ จ์ ๋ฉ์๋๋ ์ ํํ ์ธํฐํ์ด์ค์
๋๋ค. ๋ณด์๋ค์ํผ ์ด ํด๋์ค๋read()
๋ฐฉ๋ฒ(์ค์ ๋ก ๋ช ๊ฐ์ง ๋ณํ)์ด์ง๋ง ๋ฐ์ดํธ๋ง ์ฝ์ ์ ์์ต๋๋ค: ๊ฐ๋ณ ๋ฐ์ดํธ ๋๋ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฌ ๋ฐ์ดํธ. ๊ทธ๋ฌ๋์ด ์ต์
์ ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌธ์๋ฅผ ์ฝ๊ณ ์ถ์ต๋๋ค. ์ถ์ ํด๋์ค ์ ์ด๋ฏธ ๊ตฌํ๋Reader
๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค . ๋ฌธ์์์๋ ์ด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ InputStream
๋ฐโฏ Reader
์ธํฐํ์ด์ค๋ ํธํ๋์ง ์์ต๋๋ค! ๋ณด์๋ค์ํผ read()
๋ฉ์๋์ ๋ชจ๋ ๊ตฌํ์๋ ์๋ก ๋ค๋ฅธ ๋งค๊ฐ ๋ณ์์ ๋ฐํ ๊ฐ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํ์ํ ๊ณณ์
๋๋ค InputStreamReader
! ํด๋์ค ๊ฐ์ ์ด๋ํฐ ์ญํ ์ ํฉ๋๋ค .์์์ ๊ณ ๋ คํ ์นด๋ ํ๋
๊ธฐ์ ์์์์ ๊ฐ์ด ์ ์๋๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ด๋ํฐ ํด๋์ค "๋ด๋ถ"์ ๋ฃ์ต๋๋ค. ์ฆ, ํ๋๋ฅผ ์์ฑ์์๊ฒ ์ ๋ฌํฉ๋๋ค. ์์ ์์์๋ MemoryCard
๊ฐ์ฒด๋ฅผ ์์ ๋ฃ์ต๋๋ค CardReader
. InputStream
โฏ์ด์ ๊ฐ์ฒด๋ฅผ ์์ฑ์์ ์ ๋ฌํฉ๋๋ค InputStreamReader
! ์ต์ํ System.in
๋ณ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค InputStream
.
public static void main(String[] args) {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
}
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ ๋ํ ๋ฌธ์๋ฅผ ๋ณด๋ฉด InputStreamReader
์ ์์ด ์ฑ๊ณตํ์์ ์ ์ ์์ต๋๋ค :) ์ด์ ๋ฌธ์๋ฅผ ์ฝ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์ System.in
๊ฐ์ฒด(ํค๋ณด๋์ ๋ฐ์ธ๋ฉ๋ ์คํธ๋ฆผ)๊ฐ ์ฒ์์๋ ์ด๋ฅผ ํ์ฉํ์ง ์์์ง๋ง ์ธ์ด ์์ฑ์๋ ์ด๋ํฐ ํจํด์ ๊ตฌํํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๋๋ถ๋ถ์ I/O ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ถ์ Reader
ํด๋์ค์๋ ์๋ฅ์ด ํ์ ๊ฐ ์์ต๋๋คโฏ Writer
. Reader
โฏ๊ทธ๊ฒ์ ๋ฌธ์ ์์
์ ์ํ ํธ๋ฆฌํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ๊ณผ ๊ฐ์ ํฐ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋คโฏ . ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ์ ์๋ฃจ์
์ด ์
๋ ฅ ์คํธ๋ฆผ๊ณผ ๋์ผํ๊ฒ ๋ณด์
๋๋ค. OutputStream
๋ฐ์ดํธ๋ง ์ธ ์ ์๋ ํด๋์ค๊ฐ ์์ต๋๋ค.Writer
๋ฌธ์๋ก ์์
ํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ ์ถ์ ํด๋์ค์ ํธํ๋์ง ์๋ ๋ ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ด๋ํฐ ํจํด์ผ๋ก ๋ค์ ํ ๋ฒ ํด๊ฒฐ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ โฏ๋ฐโฏ โฏํด๋์ค์ ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ก OutputStreamWriter
์ฝ๊ฒ ์ ์์ํต๋๋ค . ๋ฐ์ดํธ ์คํธ๋ฆผ์ ์์ฑ์์ ์ ๋ฌํ ํ an์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ๊ฐ ์๋ ๋ฌธ์๋ฅผ ์ธ ์ ์์ต๋๋ค! Writer
OutputStream
OutputStream
OutputStreamWriter
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter streamWriter = new OutputStreamWriter(new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt"));
streamWriter.write(32144);
streamWriter.close();
}
}
์ฝ๋ 32144(็ถ)๋ก ๋ฌธ์๋ฅผ ํ์ผ์ ์์ฑํ์ฌ ๋ฐ์ดํธ๋ก ์์
ํ ํ์๊ฐ ์์ต๋๋ค :) ์ค๋์ ์ฌ๊ธฐ๊น์ง์
๋๋ค. ๋ค์ ์์
์์ ๋ง๋์! :)
GO TO FULL VERSION