/ JAVAJUNGSUK

Ch12-7~8. < >

자바의 정석 기초편

0. 목차



Chapter12. 지네릭스, 열거형, 애너테이션

Ch12 - 7. Iterator< E >

Ch12 - 8. HashMap< K, V >



Ch12 - 7. Iterator< E >


▶ Iterator가 일반 클래스 였을 때

▷ Object 사용
public interface Iterator { // 지네릭스 안 보임
    boolean hasNext();
    Object next(); // Object 그대로 사용
    void remove();
}
Iterator it = list.iterator(); // 일반 클래스 iterator()

while(it.hasNext()) {
    Student s = (Student)it.next(); // 형변환, Object → Student
    ...
}
  • Student - it.next() = Student - Object = Student를 Object로 빼라! = 에러, 형변환 필요

▶ Iterator가 제네릭 클래스가 되었을 때

▷ 타입 변수 사용
public interface Iterator<E> { // 지네릭스有 → 지네릭 클래스
    boolean hasNext();
    E next(); // Object → 타입 변수 E 그대로 사용
    void remove();
}
Iterator<Student> it = list.iterator(); // 위의 <E> 부분에 <Student>가 들어감

while(it.hasNext()) {
    Student s = it.next(); // 형변환 필요 없음, Student → Student
    ...
}
  • Student - it.next() = Student - Student = Student를 Student로 빼라! = 문제X, 형변환 필요X



Ch12 - 8. HashMap< K, V >


▶ HashMap< K(key), V(value) >란?

▷ 여러 개의 타입 변수가 필요한 경우, 콤마(,)를 구분자로 선언
  • HashMap class code
      public class HashMap<K,V> extends AbstractMap<K,V> { ... }
          ...
          public V get(Object key) { ... }
          public V put(K key, V value) { ... } // 타입 변수 K(key), V<value> 사용
          public V remove(Object key) { ... }
    
▷ 예시
  • 참조변수< >와 생성자< >가 일치해야 함
      HashMap<String, Student> map = new HashMap<String, Student>(); // 생성
        
      map.put("자바왕", new Student("자바왕", 1, 1, 100, 100, 100)); // 데이터 저장
    
  • 여기서 HashMap<String, Student> map를 생성하면,
    HashMap class에서 K → String V → Student로 변경

      public class HashMap<String, Student> extends AbstractMap<String, Student> { ... }
          ...
          public Student get(Object key) { ... }
          public Student put(String key, Student value) { ... }
          public Student remove(Object key) { ... }
    
  • get()을 활용하여 data를 꺼내보기 : 형변환 필요 없음
      HashMap<String, Student> map = new HashMap<String, Student>(); // 제네릭스로 타입 변수 지정
        
      Student s1 map.get("1-1"); // 형변환X
    

    Student - map.get("1-1") = Student - Student = Student를 Student로 반환 = 형변환X Student s1 (Student)map.get("1-1");