2023. 3. 20. 13:34γJAVA/Effective JAVA
[μ΄νν°λΈ μλ°] 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λ‘ νλ³νν΄μ£Όλ©΄ λλ€!