728x90
반응형
Generic 제한
- 제네릭의 접근 제한에 대해 알아본다.
- 앞서 Generic 기초에서 모든 타입을 받을수 있다는 것을 알았다.
- 하지만 타입을 제한 해야 되는 일이 필요하다면?
Generic 제한 필요성
- Generic 기초에서 VehicleRepairService 에서 Vehicle 외에 House 타입도 지정할수 있었다.
- 2022.06.11 - [Language/Java] - [Java] Generic 기초
- VehicleRepairService 에 House 가 들어가면 안된다.
하지만 모든 타입을 다 받게 해서 House 타입도 들어간다.
// House 타입이 가능하면 안됨
House house = new House();
VehicleRepairService<House> vehicleRepairRepairService = new VehicleRepairService<>();
vehicleRepairRepairService.repair(house);
public class VehicleRepairService<T> {
public boolean isSupport(T t) {
return (t instanceof Vehicle);
}
public void repair(T t){
if (isSupport(t)) { // Vehicle type 이 아니면 수리 불가
Vehicle vehicle = (Vehicle) t;
System.out.println(vehicle.getType() + " 수리완료");
} else {
System.out.println("수리불가");
}
}
}
Generic 제한 선언
- 아래와 같이 T extends Vehicle 을 선언해 주면
- Vehicle 을 상속 받은 객체만 지정 할 수 있다.
VehicleRepairService<T extends Vehicle>
Generic 제한 예제
- 제네릭 예제 클래스 다이어그램
더보기
예제를 위한 클래스 다이어 그램
- 이제 House 타입을 받을수 없기 때문에 타입 체크를 할 필요가 없다.
public class VehicleRepairService<T extends Vehicle> {
// public boolean isSupport(T t) { 타입을 체크할 필요가 없음
// return (t instanceof Vehicle);
// }
public void repair(T t) {
Vehicle vehicle = t;
System.out.println(vehicle.getType() + " 수리완료");
}
}
public class Test {
public static void main(String[] args) {
VehicleRepairService<Vehicle> vehicleRepairService = new VehicleRepairService<>();
VehicleRepairService<Boat> boatVehicleRepairService = new VehicleRepairService<>();
VehicleRepairService<House> repairService = new VehicleRepairService<>(); // 에러 발생
}
}
예제코드
https://github.com/rnrl1215/java-exercise/tree/main/src/main/java/generic/restriction
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] Generic 메서드 (0) | 2022.06.25 |
---|---|
[Java] Generic 와일드 카드 (0) | 2022.06.25 |
[Java] Generic 기초 (0) | 2022.06.11 |
[Java] String to LocalDateTime (0) | 2022.02.12 |
[Java] Double의 제한사항 (0) | 2021.12.11 |
댓글