[μ΄νŽ™ν‹°λΈŒ μžλ°”] Item29 μ™„λ²½κ³΅λž΅. ν•œμ •μ  νƒ€μž… λ§€κ°œλ³€μˆ˜

2023. 3. 20. 13:34ㆍJAVA/Effective JAVA

728x90

 

[μ΄νŽ™ν‹°λΈŒ μžλ°”] Item29. 이왕이면 μ œλ„€λ¦­ νƒ€μž…μœΌλ‘œ λ§Œλ“€λΌ. 

 

 

ν•œμ •μ  νƒ€μž… λ§€κ°œλ³€μˆ˜ 

: λ§€κ°œλ³€μˆ˜ν™” νƒ€μž…μ„ νŠΉμ •ν•œ νƒ€μž…μœΌλ‘œ ν•œμ •μ§“κ³  싢을 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€. 

public class Stack<E extends Number>
{
   private Number[] elements;
   private int size = 0;
   private static final int DEFAULT_INITIAL_CAPACTIY = 16;
   
   public Stack()
   {
      elements = new Number[DEFAULT_INITIAL_CAPACTIY];
   }
   
   public void push(E e)
   {
      ensureCapacity();
      elements[size++] = e;
   }
   
   public E pop()
   {
      if (size == 0) {
         throw new EmptyStackException();
      }
      
      @SuppressWarnings("unchecked")
      E result = (E) elements[--size];
      elements[size] = null;
      return result;
   }
   
   public boolean isEmpty()
   {
      return size == 0;
   }
   
   
   private void ensureCapacity()
   {
      if (elements.length == 0) {
         elements = Arrays.copyOf(elements, 2 * size + 1);
      }
   }
   
   public static void main(String[] args)
   {
      Stack<Integer> stack = new Stack<>();
      for (Integer arg : List.of(1, 2, 3))
      {
         stack.push(arg);
      }
      while (!stack.isEmpty())
      {
         System.out.println(stack.pop());
      }
   }
}

<E extends Number> 

: μ„ μ–Έν•  수 μžˆλŠ” μ œλ„€λ¦­ νƒ€μž…μ„ Numberλ₯Ό 상속(extends)ν–ˆκ±°λ‚˜ κ΅¬ν˜„ν•œ(implements)ν•œ 클래슀둜 μ œν•œν•œλ‹€. 

ν•œμ •μ  νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ œν•œν•œ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€κ±°λ‚˜, λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€. 

μ—¬κΈ°μ„œλŠ” Numberλ₯Ό μƒμ†ν–ˆκ±°λ‚˜ κ΅¬ν˜„ν•œ 클래슀둜 μ œν•œν–ˆκΈ° λ•Œλ¬Έμ— Number νƒ€μž…μ΄ μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. 

 

그리고 ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œλ§Œ ν•œμ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ‹€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ ν•œμ •ν•  수 μžˆλ‹€. 

<E extends Number & Serializable> 

: μ„ μ–Έν•  μ œλ„€λ¦­ νƒ€μž…μ€ Number와 Serializable을 λͺ¨λ‘ 상속 λ˜λŠ” κ΅¬ν˜„ν•œ νƒ€μž…μ΄μ–΄μ•Ό ν•œλ‹€. 

 

 

μ΄λ ‡κ²Œ ν•œμ •μ  νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 

private E[] elements;

μ΄λ ‡κ²Œ μ‚¬μš©ν•  수 μ—†κ³ , 

private Number[] elements;

Number[]둜 μ„ μ–Έν•΄μ€˜μ•Ό ν•œλ‹€. 

 

public E pop()
{
   if (size == 0) {
      throw new EmptyStackException();
   }
   
   @SuppressWarnings("unchecked")
   E result = (E) elements[--size];
   elements[size] = null;
   return result;
}

κ·Έ λ‹€μŒ ν˜•λ³€ν™˜ν•  λ•Œ E둜 ν˜•λ³€ν™˜ν•΄μ£Όλ©΄ λœλ‹€! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90