1. 제네릭 이해하기
이제 본격적으로 제네릭을 이해해보자.
우린 #9-3에서 알아보았던 컬렉션 프레임워크를 사용하여 다양한 자료형이 한데 뒤섞여있는 것을 보았다.
그 때 모아둔 다양한 요소들 중에서 특정 자료형을 수집하려한다면?
그럴 때 사용하는 것이 제네릭인 것이다.
제네릭에서 사용하는 타입의 종류는 아래와 같다.
이 외에 사용자가 지정해서 만드는 타입까지 여러가지 타입들이 더 있을 수 있지만 주로 사용되는건 아래의 종류들이다.
타입 | 설명 |
<T> | Type(객체 생성 시 해당 타입으로 변환된다) |
<E> | Element |
<K> | Key |
<V> | Value |
<N> | Number |
<?> - 와일드 카드 |
타입 파라미터를 대치하는 것으로 모든 클래스나 인터페이스타입이 올 수 있다. |
또는 <> 안에는 참조자료형이 올 수 있다 / String, Integer, Character 등등도 가능하다는 뜻이다. 기초자료형은 안된다(int, char, double 등등) |
2. 제네릭 사용하기
1) 생성자 함수에 제네릭 사용해보기
우선 예시 코드를 살펴봐보자.
아래 코드는 컬렉션 프레임워크 생성자 함수에 제네릭을 사용하여 요소들의 자료형을 제한한 것이다.
// int형만 num 배열에 대입 가능하다
int[] num = new int[3];
// Vector<int> 기본자료형은 올 수 없다. 에러
Vector<String> vec = new Vector<>();
vec.add("개나리");
vec.add("무궁화");
vec.add(new String("무궁화"));
// vec.add(3); 에러
// vec.add(2.4); 에러
// vec.add(new Character('R')); 에러
for(int i=0; i<vec.size(); i++) {
String str = vec.get(i);
System.out.println(str);
}
///////////////////////////////////////////////////////////////////
ArrayList<Integer> list = new ArrayList<>();
list.add(3);
list.add(new Integer(5));
// list.add(2.4); 에러
// list.add("KOREA"); 에러
////////////////////////////////////////////////////////////////////
HashSet<Double> set = new HashSet<>();
set.add(1.2);
set.add(new Double(3.5));
// set.add(7); 에러
// set.add(""); 에러
////////////////////////////////////////////////////////////////////////
HashMap<String, Character> map = new HashMap<>();
map.put("one", 'R');
map.put("two", new Character('r'));
// map.put("", ""); 에러
System.out.println(map.get("one"));
System.out.println(map.get("two"));
///////////////////////////////////////////////////////////////////////
2) 제네릭에 클래스 넣어서 사용하기
제네릭에는 클래스도 넣어서 사용할 수 있다.
class Mountain {
String name;// 산 이름
int height;// 산 높이
public Mountain () {}
public Mountain(String name, int height) {
this.name = name;
this.height = height;
} // end
} // class end
...
Mountain m1=new Mountain("한라산", 1950);
Mountain m2=new Mountain("관악산", 1500);
Mountain m3=new Mountain("북한산", 1000);
ArrayList<Mountain> item = new ArrayList<>();
item.add(m1);
item.add(m2);
item.add(m3);
이렇게 코드를 작성하면 ArrayList인 item에는 Mountain의 형식을 가진 m1, m2, m3만이 들어갈 수 있다.
출력하는 코드는 아래와 같다.
for(int i=0; i<item.size(); i++) {
Mountain m=item.get(i);
System.out.println(m.name);
System.out.println(m.height);
}
여기서 item.get(i)를 출력하면 주소값만 나온다.
item.get(i)는 각각의 name과 height값을 모두 갖고 있기 때문이다.
그래서 이를 다시 한 번 Mountain에 담아 출력을 시켜주면 정상적으로 출력이 되는 것을 확인할 수 있다.
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #9-6 File 클래스 (0) | 2022.09.19 |
---|---|
[JAVA] #9-5 스레드(Thread) (0) | 2022.09.19 |
[JAVA] #9-3 제네릭(Generic) 이해하기 1 - 컬렉션 프레임워크 (0) | 2022.09.16 |
[JAVA] #9-2 예외처리(Exception) 2 - throws (0) | 2022.09.16 |
[JAVA] #9-1 예외처리(Exception) 1 - try...catch...finally (0) | 2022.09.16 |