"์•ˆ๋…•ํ•˜์„ธ์š”, ์•„๋ฏธ๊ณ ! ์˜ค๋Š˜์€ BufferedInputStream ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ์ ์„ ๋ง์”€๋“œ๋ฆฌ์ง€๋งŒ ยซ ๋ž˜ํผ ยป์™€ ยซ ์„คํƒ• ํ•œ ๋ด‰์ง€ ยป๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."

""ํฌ์žฅ์ง€"์™€ "์„คํƒ• ๋ด‰์ง€"๊ฐ€ ๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”?"

"์ด๊ฒƒ๋“ค์€ ์€์œ ์ž…๋‹ˆ๋‹ค. ๋“ค์–ด๋ณด์„ธ์š”. ๊ทธ๋ž˜์„œโ€ฆ"

ยซ๋ž˜ํผยป(๋˜๋Š” ยซ๋ฐ์ฝ”๋ ˆ์ดํ„ฐยป) ๋””์ž์ธ ํŒจํ„ด์€ ์ƒ์†์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐœ์ฒด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

BufferedInputStream - 1

getName๊ณผ setName์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” Cat ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ” ์ฝ”๋“œ ์„ค๋ช…
class Cat
{
 private String name;
 public Cat(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 public void setName(String name)
 {
  this.name = name;
 }
}
Cat ํด๋ž˜์Šค์—๋Š” getName ๋ฐ setName์˜ ๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
public static void main(String[] args)
{
 Cat cat = new Cat("Oscar");

 printName(cat);
}

public static void printName(Cat cat)
{
 System.out.println(cat.getName());
}
์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

ยซOscarยป๊ฐ€ ์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

cat ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ์•ฝ๊ฐ„์˜ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค . ์ด๋ฅผ ์œ„ํ•ด ์ž์ฒด ๋ž˜ํผ ํด๋ž˜์Šค๋กœ ๋ž˜ํ•‘ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

์ผ๋ถ€ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ฃผ์œ„์— ์ž์ฒด ์ฝ”๋“œ๋ฅผ "๋ž˜ํ•‘" ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) ์ž์ฒด ๋ž˜ํผ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ž˜ํ•‘ํ•  ๊ฐœ์ฒด์™€ ๋™์ผํ•œ ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.

2) ๋ž˜ํ•‘ํ•  ๊ฐ์ฒด๋ฅผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

3) ์ƒˆ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์žฌ์ •์˜๋œ ๊ฐ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ๋ž˜ํ•‘๋œ ๊ฐœ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

4) ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” Cat ๊ฐœ์ฒด์˜ getName ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ” ์ฝ”๋“œ ์„ค๋ช…
class Cat
{
 private String name;
 public Cat(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 public void setName(String name)
 {
  this.name = name;
 }
}
Cat ํด๋ž˜์Šค์—๋Š” getName๊ณผ setName์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
class CatWrapper extends Cat
{
 private Cat original;
 public CatWrapper (Cat cat)
 {
  super(cat.getName());
  this.original = cat;
 }

 public String getName()
 {
  return "A cat named " + original.getName();
 }

 public void setName(String name)
 {
  original.setName(name);
 }
}
๋ž˜ํผ ํด๋ž˜์Šค. ํด๋ž˜์Šค๋Š” ์›๋ณธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ œ์™ธํ•œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋„ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž์—๊ฒŒ ์ „๋‹ฌ๋œ ์›๋ž˜ ๊ฐ์ฒด(setName)์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ "๋˜์งˆ" ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ํ˜ธ์ถœ์„ "์žก์•„์„œ" ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ/๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .
public static void main(String[] args)
{
 Cat cat = new Cat("Oscar");
 Cat catWrap = new CatWrapper (cat);
 printName(catWrap);
}

public static void printName(Cat named)
{
 System.out.println(named.getName());
}
์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

ยซ์˜ค์Šค์นด๋ผ๋Š” ์ด๋ฆ„์˜ ๊ณ ์–‘์ดยป.
์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค

์ฆ‰, ๊ฐ ์›๋ž˜ ๊ฐœ์ฒด๋ฅผ ์›๋ž˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋ฐ›๋Š” ๋ž˜ํผ ๊ฐœ์ฒด๋กœ ์กฐ์šฉํžˆ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋ž˜ํผ์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์€ ์›๋ž˜ ๊ฐœ์ฒด๋กœ ์ „๋‹ฌ๋˜๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์‹œ๊ณ„์ฒ˜๋Ÿผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

"์ข‹์•„์š”. ์†”๋ฃจ์…˜์€ ๊ฐ„๋‹จํ•˜๊ณ  ๊ธฐ๋Šฅ์ ์ž…๋‹ˆ๋‹ค."

"๋˜ํ•œ ยซ์„คํƒ• ์ฃผ๋จธ๋‹ˆยป์— ๋Œ€ํ•ด์„œ๋„ ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋””์ž์ธ ํŒจํ„ด์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์€์œ ์ž…๋‹ˆ๋‹ค. ๋ฒ„ํผ์™€ ๋ฒ„ํผ๋ง์ด๋ผ๋Š” ๋‹จ์–ด์— ๋Œ€ํ•œ ์€์œ ์ž…๋‹ˆ๋‹ค. ๋ฒ„ํผ๋ง์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?"

BufferedInputStream - 2

์˜ค๋Š˜์€ Rishi๊ฐ€ ์š”๋ฆฌํ•  ์ฐจ๋ก€์ด๊ณ  ๋‹น์‹ ์ด ๊ทธ๋ฅผ ๋•๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. Rishi๋Š” ์•„์ง ์—ฌ๊ธฐ์— ์—†์ง€๋งŒ ์ฐจ๋ฅผ ๋งˆ์‹œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ์„คํƒ• ํ•œ ์Šคํ‘ผ์„ ๊ฐ€์ ธ๋‹ค๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค. ์ง€ํ•˜์‹ค๋กœ ๊ฐ€์„œ ์„คํƒ• ํ•œ ๋ด‰์ง€๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ๊ฐ€๋ฐฉ ์ „์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค์…”๋„ ๋˜์ง€๋งŒ ์ €๋Š” ๊ฐ€๋ฐฉ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ์Šคํ‘ผ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฐฉํ•œ ๋กœ๋ด‡์ฒ˜๋Ÿผ ํ•œ ์ˆŸ๊ฐ€๋ฝ ๋– ์„œ ๋‚˜์—๊ฒŒ ๊ฐ€์ ธ๋‹ค์ค€๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ฐจ์— ์ฒจ๊ฐ€ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ถฉ๋ถ„ํžˆ ๋‹ฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜ ๋” ๊ฐ€์ ธ๋‹ค ๋‹ฌ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‹ค์‹œ ์ง€ํ•˜์‹ค๋กœ ๊ฐ€์„œ ํ•œ ์ˆŸ๊ฐ€๋ฝ ๋” ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Ellie๊ฐ€ ์™€์„œ ๊ทธ๋…€๋ฅผ ์œ„ํ•ด ์„คํƒ•์„ ๊ฐ€์ ธ ์˜ค๋ผ๊ณ  ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค ... ์ด ๋ชจ๋“  ๊ฒƒ์€ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

Rishi๊ฐ€ ์™€์„œ์ด ๋ชจ๋“  ๊ฒƒ์„๋ณด๊ณ  ์„คํƒ•์ด ๊ฐ€๋“ ์ฐฌ ์„คํƒ• ๊ทธ๋ฆ‡์„ ๊ฐ€์ ธ๋‹ค๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Ellie์™€ ๋‚˜๋Š” Rishi์—๊ฒŒ ์„คํƒ•์„ ์š”๊ตฌํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Š” ๋‹จ์ˆœํžˆ ์„คํƒ• ๊ทธ๋ฆ‡์—์„œ ๊ทธ๊ฒƒ์„ ์šฐ๋ฆฌ์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

Rishi๊ฐ€ ๋‚˜ํƒ€๋‚œ ํ›„์— ์ผ์–ด๋‚œ ์ผ์„ ๋ฒ„ํผ๋ง ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . ์„คํƒ• ๊ทธ๋ฆ‡์ด ๋ฒ„ํผ์ž…๋‹ˆ๋‹ค. ๋ฒ„ํผ๋ง ๋•๋ถ„์— "ํด๋ผ์ด์–ธํŠธ"๋Š” ๋ฒ„ํผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฒ„ํผ๋Š” ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ์†Œ์Šค์—์„œ ๋งŽ์€ ๋ถ€๋ถ„ ์„ ์ฝ์Šต๋‹ˆ๋‹ค .

"๋ฉ‹์ง„ ์˜ˆ์•ผ, Kim. ๋‚˜๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•œ๋‹ค. ์„คํƒ• ํ•œ ์Šคํ‘ผ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์ŠคํŠธ๋ฆผ์—์„œ ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค."

"์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. BufferedInputStream ํด๋ž˜์Šค๋Š” ๋ฒ„ํผ๋ง๋œ ๋ž˜ํผ์˜ ์ „ํ˜•์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค. InputStream ํด๋ž˜์Šค๋ฅผ ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ InputStream์—์„œ ํฐ ๋ธ”๋ก์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋กœ ์ฝ์€ ๋‹ค์Œ ์šฐ๋ฆฌ๊ฐ€ ๋ฒ„ํผ์—์„œ ์กฐ๊ฐ๋ณ„๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋ถ€ํ„ฐ ์ฝ์–ด๋ด."

"์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ์šฉ ๋ฒ„ํผ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?"

"๊ทธ๋ ‡์ง€."

"์˜ˆ๋ฅผ ๋“ค์–ด?"

"์“ฐ๋ ˆ๊ธฐํ†ต์„ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋งค๋ฒˆ ์†Œ๊ฐ๋กœ์— ๋„ฃ๊ธฐ ์œ„ํ•ด ๋ฐ–์— ๋‚˜๊ฐ€์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์“ฐ๋ ˆ๊ธฐํ†ต์— ๋ฒ„๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Bubba๋Š” 2์ฃผ์— ํ•œ ๋ฒˆ์”ฉ ์บ”์„ ๋ฐ–์œผ๋กœ ๊ฐ€์ ธ๊ฐ‘๋‹ˆ๋‹ค. ๊ณ ์ „์ ์ธ ๋ฒ„ํผ์ž…๋‹ˆ๋‹ค."

"์–ผ๋งˆ๋‚˜ ํฅ๋ฏธ๋กญ๊ตฐ! ๊ทธ๋Ÿฐ๋ฐ ์„คํƒ• ํ•œ ๋ด‰์ง€๋ณด๋‹ค ํ›จ์”ฌ ๋” ์„ ๋ช…ํ•ด."

"๊ทธ๋ฆฌ๊ณ  flush() ๋ฉ”์„œ๋“œ๋Š” ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋ฐ”๋กœ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์†๋‹˜์ด ๋„์ฐฉํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."