item 29 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e μμ΄ν 29λ₯Ό μμ½ν λ΄μ© μ λλ€.
JDKκ° μ 곡νλ μ λ€λ¦ νμ
κ³Ό λ©μλ
λ₯Ό μ¬μ©νλ μΌμ μΌλ°μ μΌλ‘ μ¬μ΄ νΈμ΄μ§λ§, μ λ€λ¦ νμ
μ μλ‘ λ§λλ μΌμ μ‘°κΈ λ μ΄λ ΅λ€.
public class Stack {
private Object[] elements;
...
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
...
}
public Object pop() {
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
...
}
...
}
μ Stack ν΄λμ€λ₯Ό μ λ€λ¦μΌλ‘ λ§λ€μ΄ 보μ
public class Stack<E> {
private E[] elements;
...
public Stack() {
elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(E e) {
...
}
public E pop() {
if (size == 0)
throw new EmptyStackException();
E result = elements[--size];
...
}
...
}
κ·Έλ¬λ©΄ μλμ κ°μ κ²½κ³ λ©μμ§λ₯Ό νμΈν μ μμ κ²μ΄λ€.
Stack.java:8: warning: [unchecked] unchecked cast
found: Object[], required: E[]
elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
^
λ¬Έμ μ λ°°μ΄ elements
λ private
νλμ μ μ₯λκ³ ν΄λΌμ΄μΈνΈλ‘ λ°νλκ±°λ λ€λ₯Έ λ©μλμ μ λ¬λλ μΌμ΄ μ ν μλ€. push
λ©μλλ₯Ό ν΅ν΄ λ°°μ΄μ μ μ₯λλ μμμ νμ
μ νμ E
λ€. λ°λΌμ μ΄ λΉκ²μ¬ νλ³ν
μ νμ€ν μμ νλ€.
λΉκ²μ¬ νλ³νμ΄λ? κ²μ¬νμ§ μλ€κ³ νλ³ννλ κ²½μ°λ₯Ό λ§νλ€. μμ κ°μ΄ Eκ° λ¬΄μ¨ νμ μΈμ§ μ μ μμ΄μ μ»΄νμΌλ¬κ° λ°νμμλ μμ ν μ§ μ μ μλ€λ κ²½κ³ λ₯Ό 보μ¬μ£Όκ³ μλ€. μ λ€λ¦μ μ€μ²΄ν λΆκ° νμ μ΄λ―λ‘ λ°νμμμλ νμ μ λν μ λ³΄κ° μκ±°λκΈ° λλ¬Έμ΄λ€.
λΉκ²μ¬ νλ³ν
μ΄ μμ ν¨μ μ§μ μ¦λͺ
νλ€λ©΄ λ²μλ₯Ό μ΅μλ‘ μ’ν @SuppressWarnings
μλν
μ΄μ
μΌλ‘ ν΄λΉ κ²½κ³ λ₯Ό μ¨κΈ΄λ€.
// λ°°μ΄ elementsλ push(E)λ‘ λμ΄μ¨ E μΈμ€ν΄μ€λ§ λ΄λλ€.
// λ°λΌμ νμ
μμ μ±μ 보μ₯νμ§λ§,
// μ΄ λ°°μ΄μ λ°νμ νμ
μ E[] κ° μλ Object[]λ€!
@SuppressWarnings("unckecked")
public Stack() {
elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
}
μ λ€λ¦ λ°°μ΄ μμ± μ€λ₯λ₯Ό ν΄κ²°νλ λ λ²μ§Έ λ°©λ²μ elements
νλμ νμ
μ E[]
μμ Object[]
λ‘ λ°κΎΈλ κ²μ΄λ€.
Eλ μ€μ²΄ν λΆκ° νμ
μ΄λ―λ‘ μ»΄νμΌλ¬λ λ°νμμ μ΄λ€μ§λ νλ³ν
μ΄ μμ νμ§ μ¦λͺ
ν λ°©λ²μ΄ μλ€. μ΄λ²μλ μ°λ¦¬κ° μ§μ μ¦λͺ
νκ³ κ²½κ³ λ₯Ό μ¨κΈΈ μ μλ€.
public E pop() {
if (size == 0)
throw new EmptyStackException();
// pushμμ E νμ
λ§ νμ©νλ―λ‘ μ΄ νλ³νμ μμ νλ€.
@SuppressWarnings("unckecked") E result = (E) elements[--size];
...
}
νμ λ§€κ°λ³μμ μ μ½μ λλ μ λ€λ¦ νμ λ μλ€.
java.util.concurrent.DelayQueue
λ₯Ό 보면 νμΈν μ μλ€.
class DelayQueue<E extends Delayed> implements BlockingQueue<E>
μ΄λ κ² νμ¬ DelayQueue
μμ κ³Ό DelayQueue
λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈλ DelayQueueμ μμμμ (νλ³ν μμ΄) κ³§λ°λ‘ Delayed
ν΄λμ€μ λ©μλλ₯Ό νΈμΆν μ μλ€.
μ 리
ν΄λΌμ΄μΈνΈμμ μ§μ νλ³ν
ν΄μΌ νλ νμ
λ³΄λ€ μ λ€λ¦
νμ
μ΄ λ μμ νκ³ μ°κΈ° νΈνλ€. κ·Έλ¬λ μλ‘μ΄ νμ
μ μ€κ³ν λλ νλ³ν μμ΄λ μ¬μ©ν μ μλλ‘ νλΌ. κΈ°μ‘΄ νμ
μ€ μ λ€λ¦μ΄μμ΄μΌ νλ κ² μλ€λ©΄ μ λ€λ¦
νμ
μΌλ‘ λ³κ²½νμ.