IT/JAVA
[JAVA] #13 제네릭
우웅지
2023. 4. 24. 12:05
728x90
반응형
SMALL
제네릭이란?
public class Box{
public Object content;
}
Box box = new Box();
box.content = 모든 객체;
String content = (String)box.content;
필드에 다양한 타입으로 받아오고 싶을 때 Object로 선언하게 되면 내용물을 얻을 때 마다 강제 타입 변환을 거쳐야 한다.
=> 제네릭 : 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능
public class Box<T>{
public T content;
}
Box<String> box1 = new Box();
box1.content ="안녕하세요";
String content = box.content;
Box<Integer> box2 = new Box();
box2.content = 20;
int content = box.content;
=> 강제 타입 변환이 필요없다.
제네릭 타입
* 제네릭 타입 : 결정되지 않은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다. 선언부에 <>가 붙고 그 사이에 타입 파라미터들이 위치한다.
public class 클래스명<A, B, ...> { ... }
public interface 인터페이스명<A, B, ...>{ ... }
public class Product<K,M>{
private K kind;
private M model;
}
public interface Rentable<P>{
P rent(); //타입 파라미터 P를 리턴타입으로도 사용
}
제네릭 메소드
* 제네릭 메소드 : 타입 파라미터를 갖고 있는 메소드를 말한다.
타입 파라미터가 메소드 선언부에서 정의된다
리턴 타입 앞에 <> 를 추가하고 타입 파라미터를 정의한 뒤, 리턴 타입과 매개변수 타입에서 사용한다.
public <A, B, ...> 리턴타입 메소드명(매개변수,...) { ... }
public <T> Box<T> boxing(T t) { ... }
제한된 타입 파라미터
경우에 따라 타입 파라미터를 대체하는 구체적인 타입을 제한할 필요가 있다.
ex) 숫자를 연산하는 제네릭 메소드는 대체로 Number또는 그의 자식클래스로 제한할 필요가 있다.
*제한된 타입 파라미터 : 모든 타입으로 대체할 수 없고,특정 타입과 자식 또는 구현 관계에 있는 타입만 대체할 수 있는 타입 파라미터
public <T extends 상위타입> 리턴타입 메소드명(매개변수, ...) { ... }
와일드카드 타입 파라미터
리턴타입 메소드명(제네릭타입<? extends Student> 변수) { ... }
//Student와 그 자식클래스만 타입으로 가능함.
리턴타입 메소드명(제네릭타입<? super Worker> 변수){ ... }
//Worker와 그 부모클래스만 매개변수 타입으로 가능함.
리턴타입 메소드명(제네릭타입<?> 변수) { ... }
728x90
반응형
LIST