반응형
1) Generic(제네릭)
클래스를 선언할 때 자료형을 정하지 않는 기법(사용할 때 지정=객체를 만들 때 지정)
<키워드>
키워드는 보통 대문자로 시작한다.
E : Element
N : Number
T : Type
K : Key
V : Value
2) 제네릭 클래스
클래스 내부에서 사용될 자료형을 지정한다.
class 클래스명<키워드>{
//내부에서 키워드를 타입으로 사용 가능
키워드 변수;
}
객체를 만들 때 키워드 대신에 사용될 자료형을 지정해준다.
public class GClassTest<Web> {
Web data;
}
public class GenericMain {
public static void main(String[] args) {
GClassTest<String> obj = new GClassTest<>();
obj.data = "Hello";
GClassTest<Integer> obj2 = new GClassTest<>();
// Integer = 10
obj2.data = 10;
}
}
3) 제네릭 메소드
메소드 내부에서 사용될 자료형을 지정한다.
<키워드>리턴타입 메소드명( ){
//내부에서 키워드를 타입으로 사용 가능
}
리턴타입과 매개변수도 키워드로 작성 가능하다.
public class GMethodTest {
<T> T f(T data) {
if (data instanceof Integer) {
System.out.println("정수로 호출");
} else if (data instanceof String) {
System.out.println("문자열로 호출");
}
return data;
}
}
public class GenericMain {
public static void main(String[] args) {
GMethodTest m = new GMethodTest();
m.<Integer>f(10);
m.<String>f("h");
// 제네릭 메소드는 묵시적으로 타입을 알 수 있는 경우가 대부분이다.
// 보통 <자료형>을 작성해주지 않아도 호출이 가능하다.
m.f("h");
m.f(10);
}
}
4) 제네릭 인터페이스
인터페이스 내부에서 사용될 자료형을 지정한다.
interface 인터페이스명<키워드>{
//내부에서 키워드를 타입으로 사용 가능
}
public interface GInterfaceTest<N1, N2> {
N1 add(N1 num1, N1 num2);
N2 div(N2 num1, N2 num2);
}
public class GenericMain {
public static void main(String[] args) {
GInterfaceTest<Integer, Double> obj = new GInterfaceTest<Integer, Double>() {
@Override
public Double div(Double num1, Double num2) {
// TODO Auto-generated method stub
return num1/num2;
}
@Override
public Integer add(Integer num1, Integer num2) {
// TODO Auto-generated method stub
return num1+num2;
}
};
System.out.println(obj.add(10, 2));
}
}
반응형
'Back-End > JAVA' 카테고리의 다른 글
[Java] ArrayList (0) | 2021.06.01 |
---|---|
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2021.05.31 |
[Java] Wrapper Class (0) | 2021.05.31 |
[Java] Object 클래스 (0) | 2021.05.31 |
[Java] 예외 처리 (0) | 2021.05.28 |