Day07
Jang HyungSuk edited this page Jan 11, 2022
·
1 revision
LinkedList를 직접 구현하는 과정에서 나는 VideoData 자체를 노드로 보고 VideoData만을 취급하는 myLinkedList 클래스를 설계했다. 하지만 준, 피오, 후, 땃쥐, sally, Jay 등 많은 멤버들이 제네릭을 이용해 범용적인 LinkedList를 구현 한 후에 이를 사용하는 것을 보고 나도 범용적인 LinkedList를 구현하고 싶었다. 이를 위해서 가장 기본이 되어야 하는 것이 제네릭이라고 생각해서 제네릭에 대해 공부를 해봤다.
- 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
- 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입을 체크를 해주는 기능
- 컴파일 시에 타입을 체크하기 때문에 타입 안정성을 높일 수 있음
많이 쓰이는 제네릭
타입 | 설명 |
---|---|
<T> | Type |
<E> | Element |
<K> | Key |
<V> | Value |
<N> | Number |
class Node {
Object data;
Node nextNode;
public Node(Object o) {
this.data = o;
nextNode = null;
}
}
class Node<E> {
E data;
Node<E> nextNode;
public Node(E o) {
this.data = o;
next = null;
}
}
모든 데이터 타입이 들어올 수 있었던 초기의 Node
와 달리 두번째에서 제네릭을 이용해서 만든 노드는 Node<Integer> mynode = new Node<>();
와 같이 해서 Integer만 담거나 내가 구현한 VideoData
만 담을 수 있게 할 수 있다.
주의사항
제네릭에는 참조 타입만 들어갈 수 있다. 즉 primitive Type인 byte, short, int, long ... 은 사용할 수 없다.