컬렉션 객체 선언을 제네릭화 하거나, JDK가 제공하는 제네릭 자료형과 메서드를 사용하는 것은 일반적으로 어렵지 않다. 그러나 제네릭 자료형을 직접만드는 것은 어렵지만 그래도 배워둘만한 가치가 있다.
1. 제네릭을 사용하지 않고 Object class를 활용하여 만든 Stack class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; 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]; elements[size] = null; return result; } } | cs |
2. 제네릭을 사용하여 만든 최초 Stack class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class Stack<E> { private E[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; @SuppressWarnings("unchecked") public Stack() { elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) {...} public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; return result; } } | cs |
3. elements class자체를 변경하여 만든 최종 Stack class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class Stack<E> { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(E e) {...} public E pop() { if (size == 0) throw new EmptyStackException(); @SuppressWarnings("unchecked") E result = (E) elements[--size]; elements[size] = null; return result; } } | cs |
End of Document
반응형
'개발이야기 > Effective Java' 카테고리의 다른 글
[Effective Java]무점검 경고(unchecked warning)를 제거하라 (0) | 2017.04.16 |
---|---|
[Effective Java]새 코드에는 무인자 제네릭 자료형을 사용하지 마라 (0) | 2017.04.15 |
[Effective Java]자료형을 정의할 때 표식 인터페이스를 사용하라 (0) | 2017.03.10 |
[Effective Java]Override 어노테이션은 일관되게 사용하라 (0) | 2017.03.10 |
[Effective Java]작명 패턴 대신 어노테이션을 사용하라 (0) | 2017.03.10 |
[Effective Java]int 상수 대신 enum을 사용하라 (0) | 2017.03.10 |