2022. 10. 12. 21:29ㆍJava 프로그램
제네릭 2편 이어서 시작 하겠습니다!
1. 멀티 타입 파라미터
- 각 타입 파라미터는 ' , ' 로 구분합니다.
ex) class<K,V,...>{...} interface<K,V,...>{...}
한번 코드를 작성 해볼까요?
public class Test<P,M> {
private P product;
private M modelNumber;
public P getProduct() {
return product;
}
public void setProduct(P product) {
this.product = product;
}
public M getModelNumber() {
return modelNumber;
}
public void setModelNumber(M modelNumber) {
this.modelNumber = modelNumber;
}
}
Test 클래스에 멀티 파라미터 <P,M> 을 사용했습니다.
main 메소드에서 어떻게 사용하는지 확인 해야 마음이 편안합니다.. 그러니 한번 해보도록 하겠습니다!
public class Practice {
public static void main(String[] args) {
Test<String,Integer> test = new Test<>();
test.setProduct("Air Conditional");
test.setModelNumber(1121121);
String product = test.getProduct();
int mnumber = test.getModelNumber();
System.out.println(product);
System.out.println(mnumber);
}
}
역시 연습 클래스인 practice의 main 메소드에서 멀티 파라미터가 어떻게 활용되는지 확인하기 위한 코드를 작성했습니다.
product 변수와 mnumber 변수는 각각 String, int 형 변수이고, 같은 클래스 객체 내에서 강제 형 변환 없이 자연스럽게 사용이 가능함을 볼 수 있습니다.
2. 제네릭 메소드
- 매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드
1) 제네릭 메소드 선언 방법
=> 리턴 타입 앞에 "<>" 기호를 추가, 타입 파라미터를 작성
ex)
public <타입 파라미터, ...> return타입 메소드명(매개변수,...){...}
=> public<T> Test<T> dotest(T t) {...}
2) 제네릭 메소드 호출하는 두 가지 방법
2-1) 리턴타입 변수 = <구체적인 타입> 메소드명(매개값);
ex) Test<Integer> test = <Integer> dotest(100);
2-2) 리턴타입 변수 = 메소드명(매개값);
ex) Test<String> test = dotest("hello")
3. 제한된 타입 파라미터
- 타입 파라미터에 지정되는 구체적인 타입을 제한할 필요가 있습니다.
1) 상속 및 수현 관계에 이용해 타입 제한
public <T extends 상위타입> 리턴타입 메소드명(매개변수,...){...}
2) 타입 파라미터를 대체할 구체적인 타입
- 상위 타입이거나 하위 또는 구현 클래스만 지정 가능합니다.
4. 와일드 카드 타입
- 와일드 카드 타입은 세 가지의 형태가 존재합니다.
1) 제네릭타입<?> : 제한 없음
- 타입 파라미터를 대치하는 구체적인 타입으로 모든 클래스나 인터페이스 타입이 올 수 있습니다.
2) 제네릭 타입<? extends 상위 타입> : 상위 클래스 제한
- 타입 파라미터를 대치하는 구체적인 타입으로 상위 타입이나 하위 타입만 올 수 있습니다.
3) 제네릭 타입<? super 하위 타입> : 하위 클래스 제한
- 타입 파라미터를 대치하는 구체적인 타입으로 하위 타입이나 상위 타입이 올 수 있습니다.
5. 제네릭 타입의 상속과 구현
- 제네릭 타입을 부모 클래스로 사용할 경우는 타입 파라미터는 자식클래스도 기술 해줘야 합니다-!
ex) public class ChildProduct <T , M> extends Product<T,M> {...}그리고 자식은 추가적인 타입을 가질 수 있습니다.
ex) public class ChildProduct <T , M , C> extends Product<T, M> {...}
이로써 제네릭에 대해서 공부해 봤습니다.
역시 부족한 저의 글이지만 최선을 다해 설명을 해봤습니다 ㅎㅎㅎㅎ 감사합니다!
'Java 프로그램' 카테고리의 다른 글
자바 Collection(컬렉션) 2편(Set 컬렉션) (0) | 2022.10.14 |
---|---|
자바 Collection(컬렉션) 1편(컬렉션 개념 및 List) (1) | 2022.10.13 |
제네릭(Generic) 1편[제네릭 기본] (0) | 2022.10.12 |
자바 기본 API 3편<마지막> (StringTokenizer~Date 클래스) (0) | 2022.10.12 |
자바 기본 API 2편 (String Class~~ (2) | 2022.09.30 |