제네릭(Generics) - 활용 예

정순동·2023년 12월 29일
0

자바기초

목록 보기
68/89

Iterator<타입>

Iterator의 소스↓

	public interface Iterator<E> {
    	boolean hasNext();
        E next();
        void remove();
    }

예시

import java.util.*;

public class IteratorGenericsExample {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<Student> ();
        list.add(new Student("자바왕", 1, 1));
        list.add(new Student("자바짱", 1, 2));
        list.add(new Student("홍길동", 2, 1));

        Iterator<Student> it = list.iterator();
        while (it.hasNext()) {
            // Student s = (Student) it.next(); // 제네릭을 사용하지 않으면 형변환이 필요하다.
            Student s = it.next();
            System.out.println(s.name);
        }
    }
}

class Student {
    String name = "";
    int ban;
    int no;

    Student(String name, int ban, int no) {
        this.name = name;
        this.ban = ban;
        this.no = no;
    }
}

HashMap<키, 값>

HashMap처럼 데이터를 키-값 쌍으로 저장하는 컬렉션 클래스는 지정해야 하는 타입이 두개이다.

	public class HashMap<K,V> extends AbstractMap<K,V> {
    	...
        public V get(object key) { ... }
        public V put(K key, V value) { ... }
        public V remove(Object key) { ... }
        ...
    }

만약 키의 타입이 String이고 저장할 타입이 Student라면 아래와 같이 생성한다.

	HashMap<String, Student> map = new HashMap<String, Student>(); // 생성
    map.put("자바왕", new Student("자바왕", 1, 1, 100, 100, 100)); // 데이터 저장

이렇게 HashMap을 만들었다면 아래와 같이 작동한다고 보면 된다.

	public class HashMap extends AbstractMap {
    	...
        public Student get(Object kye) { ... }
        public Student put(String, key, Student value) { ... }
        public Student remove(Object key) { ... }
   		```     
    }

이렇게 제네릭을 사용하면 HashMap에서 get(Object key), keySet(), values()를 사용할 때 형변환이 필요없다.

0개의 댓글