제너릭( Generic )
class Bank{
Object t = null;
}
class Bank2 {
String t = null;
}
public class Main{
public static void main(String[] args){
Bank b = new Bank();
b.t = "HelloWorld";
// String b2 = b.t ; << 에러
String b2 = (String)b.t;
Bank2 c = new Bank2();
c.t = "HelloWorld";
String c2 = c.t;
}
}
Bank는 어떤 인스턴스이든 멤버변수로 가리킬 수 있지만, 원래대로 꺼낼 때는 반드시 캐스팅 해야한다.
Bank2는 String 만 멤버변수를 이용하여 가리킬 수 있지만, 원래대로 꺼낼 때 캐스팅 필요 없다.
잠시 맡겼다가 꺼낼 때 양쪽이 확연히 장점이 갈린다. "양쪽의 장점을 결합할 수는 없을까? 동적으로 선택할 수 있으면 하나의 클래스로 딱인데"
class Bank <X>{ //extends Object는 생략가능
X t = null;
}
public class Main{
public static void main(String[] args){
Bank<Object> bank = new Bank<Object>(); // Object t = null;
bank.t = "HelloWorld";
String t2 = (String)bank.t;
Bank<String> bank2 = new Bank<String>();
bank2.t = "HelloWorld";
String t3 = bank2.t;
Bank<Integer> bank3 = new Bank<Integer>();
bank3.t = 100; //오토박싱 ( Integer t = new Integer( 100 ); )
int j = bank3.t; // 언박싱 ( int j = t.intValue() )
}
}
- 클래스 안에서 언급되는 변수의 타입을 <> 안에 지정되는 타입으로 동적으로 결정할 수 있다.
>> 이를 제너릭( Generic ) 이라고 부른다. - 자바에서 제네릭(generic)이란 데이터의 타입을 일반화한다는 것을 의미한다.
- 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.
제너릭을 사용했을 때의 장점은 다음과 같다.
- 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다.
- 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.
[ 인터페이스에 제너릭을 활용한 예 ]
interface ITemp <X> {
public X getData();
}
class Temp implements ITemp<String>{
public String getData(){ return "HelloWorld" ;} // 오버라이딩
}
class Temp2 implements ITemp<Integer>{
public Integer getData(){ return 100; } // 오버라이딩 발생, 100이 오토박싱되어 new Integer( 100 ) 이 반환된다.
}
public class Main{
public static void main(String[] args){
ITemp<String> it = new Temp();
String l = it.getData();
System.out.println( l ); // 결과 : HelloWorld
ITemp<Integer> it2 = new Temp2();
int i = it2.getData(); // 언박싱
System.out.println( i ); // 결과 : 100
}
}
'JAVA > 정리한 것' 카테고리의 다른 글
| [ JAVA ] 정적( Static ) (0) | 2022.05.16 |
|---|---|
| [ JAVA ] 익명 클래스 ( Anonymous Class ) (0) | 2022.05.16 |
| [ JAVA ] Abstract 와 Interface (0) | 2022.05.15 |
| [ JAVA ] 객체지향언어의 특징 - 캡슐화 (0) | 2022.05.15 |
| [ JAVA ] 객체지향언어의 특징 - 다형성 (0) | 2022.05.14 |