HappyWeasel
Java - 제너릭 (Generic) 본문
왜 사용하는가?
컴파일 언어의 기본은 모든 에러는 컴파일이 발생할 수 있도록 유도해야 한다는 것이다. 런타임은 실제로 애플리케이션이 동작하고 있는 상황이기 때문에 런타임에 발생하는 에러는 항상 심각한 문제를 초래할 수 있기 때문이다.
특징 :
- 컴파일 단계에서 오류가 검출된다.
- 중복의 제거와 타입 안전성을 동시에 추구할 수 있게 되었다.
제너릭은 기본 데이터 타입은 사용할 수 없다.
-> java에는 기본 데이터 타입을 참조형 데이터 타입으로 변경 시키주는 wrapper 객체가 있다.
이를 이용하여 기본 데이터 타입도 사용가능하다.
class EmployeeInfo{
public int rank;
EmployeeInfo(int rank){ this.rank = rank; }
}
class Person<T, S>{
public T info;
public S id;
Person(T info, S id){
this.info = info;
this.id = id;
}
}
public class GenericDemo {
public static void main(String[] args) {
EmployeeInfo e = new EmployeeInfo(1);
Integer i = new Integer(10);
//Person<EmployeeInfo, Integer> p1 = new Person<EmployeeInfo, Integer>(e, i);
Person p1 = new Person(e, i); // 이렇게 생략 가능하다.
System.out.println(p1.id.intValue());
}
}
제너릭은 메소드에서도 사용가능하다.
package org.opentutorials.javatutorials.generic;
class EmployeeInfo{
public int rank;
EmployeeInfo(int rank){ this.rank = rank; }
}
class Person<T, S>{
public T info;
public S id;
Person(T info, S id){
this.info = info;
this.id = id;
}
public <U> void printInfo(U info){
System.out.println(info);
}
}
public class GenericDemo {
public static void main(String[] args) {
EmployeeInfo e = new EmployeeInfo(1);
Integer i = new Integer(10);
Person<EmployeeInfo, Integer> p1 = new Person<EmployeeInfo, Integer>(e, i);
p1.<EmployeeInfo>printInfo(e);
//p1.printInfo(e); 이렇게도 사용 가능하다.
p1.printInfo(e);
}
}
제너릭 상속
interface Info{
int getLevel();
}
class EmployeeInfo implements Info{
public int rank;
EmployeeInfo(int rank){ this.rank = rank; }
public int getLevel(){
return this.rank;
}
}
class Person<T extends Info>{
public T info;
Person(T info){ this.info = info; }
}
public class GenericDemo {
public static void main(String[] args) {
Person p1 = new Person(new EmployeeInfo(1));
Person<String> p2 = new Person<String>("부장");
}
}
'Basic > Java' 카테고리의 다른 글
Java - ArrayList, LinkedList (0) | 2019.04.20 |
---|---|
Java - 스택( Stack ), 큐 ( Queue ) (0) | 2019.04.20 |
Java - enum (열거형 데이터 타입) (0) | 2019.04.20 |
Java - JVM에 대하여 (스크랩) (0) | 2019.04.20 |
Java - 문자열 클래스 (0) | 2019.04.20 |
Comments