제네릭에 대한 설명이 대다수이다. 내 경험상 제네릭을 쓴 적이 거의 없었고, 메소드 같은거 볼 때, 제네릭이 들어있는거 보고.. 아 뭐지 모르겠어.. 하고 넘어가기만 했다. 이 챕터를 보고 제네릭을 확실하게 이해할 수 있었다.
- 객체 생성 후 형변환을 하는 과정을 줄이기 위해
- 객체를 메소드 파라미터로 넣을 때, 메소드파라미터 타입이 모호한 경우
- 메소드 파라미터 내에 객체의 메소드 파라미터에 데이터를 넣거나 수정할 때
public class<T> Car { private T item; void setItem() { this.item = item; } T getItem() { return this.item; } } public static void main{ Car<String> car = new Car<String>(); // T가 String로 바뀜 Car<Integer> car = new Car<Integer>(); // T가 Integer로 바뀜 }
public class<T> Car {
private T item;
void setItem() {
this.item = item;
}
T getItem() {
return this.item;
}
}
public static void main{
Car<String> car = new Car<String>(); // T가 String로 바뀜
carMethod(car);
}
public void carMethod(Car<?> car) {
Object data = car.getItem();
}
public class<T> Car {
private T item;
void setItem() {
this.item = item;
}
T getItem() {
return this.item;
}
}
public static void main{
Car<String> car = new Car<String>(); // T가 String로 바뀜
carMethod(car);
}
//
public void carMethod(Car<? extends Style> car) {
Style data = car.getItem(); //최상단이 Style여서 Object를 사용안해도 실행가능
// 하지만 data에 값을 조회는 가능하지만, 수정은 할 수가 없음
}
public class<T> Car {
private T item;
void setItem() {
this.item = item;
}
T getItem() {
return this.item;
}
}
public static void main{
Car<String> car = new Car<String>(); // T가 String로 바뀜
carMethod(car);
}
//
public <T> void carMethod(Car<? extends Style> car, T temp) {
Style data = car.getItem(); //최상단이 Style여서 Object를 사용안해도 실행가능
data.setData(temp);
T item = data.getItem;
}
문서나 아니면 라이브러리를 볼 때, ? extends 등등을 많이 봤지만 이해를 안하고 넘어갔었다. 이번 기회를 통해 기존 로직등을 파악할 때 해당 챕터에서 본 지식이 큰 도움이 될 것 같다.