[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item24 ์™„๋ฒฝ๊ณต๋žต. ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด

2023. 3. 14. 10:23ใ†JAVA/Effective JAVA

728x90

 

item24. ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋˜๋„๋ก static์œผ๋กœ ๋งŒ๋“ค๋ผ. 

" p.147. ์–ด๋Œ‘ํ„ฐ"

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item24. ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋˜๋„๋ก static์œผ๋กœ ๋งŒ๋“ค๋ผ. (tistory.com)

 

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item24. ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋˜๋„๋ก static์œผ๋กœ ๋งŒ๋“ค๋ผ.

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item23. ํƒœ๊ทธ ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋ผ. ์ค‘์ฒฉ ํด๋ž˜์Šค(nested class)๋ž€ ๋‹ค๋ฅธ ํด๋ž˜์Šค ์•ˆ์— ์ •์˜๋œ ํด๋ž˜์Šค๋ฅผ ๋งํ•œ๋‹ค. ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ์ž์‹ ์„ ๊ฐ์‹ผ ๋ฐ”๊นฅ ํด๋ž˜์Šค์—์„œ

hyejin.tistory.com

๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค. 

 

์ด๋•Œ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์ด๋ž€? 

: ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํŒจํ„ด์„ ๋งํ•œ๋‹ค.

์ฆ‰, ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํŒจํ„ด์ด๋‹ค. 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. 

 

Target 

: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค 

 

Adaptee 

: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค 

 

Adpater 

: target ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค, ์ด๋•Œ Adpatee์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ  

 

Client 

: Target ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด 

public class AdapterInJava
{
   public static void main(String[] args)
   {
      // ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ œ
      try (InputStream is = new FileInputStream("number.txt");
          InputStreamReader isr = new InputStreamReader(is);
          BufferedReader reader = new BufferedReader(isr))
      {
         while (reader.ready())
         {
            System.out.println(reader.readLine());
         }
      }
      catch (IOException e)
      {
         throw new RuntimeException(e);
      }
   }
}

InputStream, InputStreamReader, BufferedReader๊ฐ€ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

public class MySet<E> extends AbstractSet<E>
{
   @Override
   public Iterator<E> iterator()
   {
      return new MyIterator();
   }
   
   @Override
   public int size()
   {
      return 0;
   }
   
   // ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
   private class MyIterator implements Iterator<E>
   {
      @Override
      public boolean hasNext()
      {
         return false;
      }
      
      @Override
      public E next()
      {
         return null;
      }
   }
}

๊ทธ๋ฆฌ๊ณ  MyIterator ์—ญ์‹œ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ์ด๋‹ค. 

 

 

 

๐Ÿ“š ์ •๋ฆฌ

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์€ ๊ธฐ๋Šฅ์ƒ ๋ฌธ์ œ์—†์ด ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋‹จ์ง€ ์ธํ„ฐํŽ˜์ด์Šค ์ฐจ์ด ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋งŽ์ด ์‘์šฉ๋˜๋Š” ํŒจํ„ด์ด๋‹ค. 

๋˜ํ•œ ๊ธฐ์กด ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋ณด์ • ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์€ ์‹ค๋ฌด์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์˜ค๋ž˜๋œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ์ฝ”๋“œ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90